我正在爲我的項目使用SQLAlchemy,並且遇到需要複雜查詢的問題。我承認SQL不是我最強的套裝。我的問題是這樣的。SQL(鍊金術)查詢,獲取具有相同外鍵的所有條目的最新條目
有兩個表問題(父母)和一對多關係的變化。更改包含一個條目「changed_on」和一個外鍵「issue_id」,以及一個「新」值更改的「字段」。
(如 的變化可以有issue_id = 1, field='status', new='closed' changed_on='25/01/2012'
和issue_id = 1, field='status', new='resolved', changed_on='24/01/2012'
)
我要算多少這樣的變化,我們以前有過一個X日起,但只得到了一個具有最新日期的(最新的是與查找日期相關)。
到目前爲止我的代碼之前的某一天X
for day in dates:
q2 = Change.session.query(func.count(Change.id)).\
filter(Change.changed_on <= day, Change.field == attr, Change.new == value).all()
這得到前「天」某一特定領域和價值的物品的正確的計數,但它並沒有考慮到,以獲得計數最新的更新值。
我意識到,在過濾我會砸Change.new == value
但在那之後我如何過濾它得到的只是帶有Y的X更改的最新更新ISSUE_ID
編輯:
更好的辦法做到這將是每天都能像
{
'01/04/2015': {
'open' :10,
'closed' : 15....}
}
但一些日子的字典的問題可以從新建 - >收走了,所以我們需要統計,只有關閉那些(LA測試更新)
相當正確的方式。謝謝! 但這會重複計算issue_id相同的問題,對吧? 有什麼辦法如果添加ISSUE_ID選擇和組你特定問題的數量來獲得與同ISSUE_ID所有更改的條目,並只計算「最新」 – MayTheSchwartzBeWithYou 2015-03-02 14:56:19
@MayTheSchwartzBeWithYou : 查詢(Change.Issue_id ... ).filter(Change.changed_on> '22/01/2012',....)。group_by(Change.issue_id,... [在select中的其他字段]) – denex 2015-03-03 09:52:29
非常感謝@denex。我用數據結構和你的指導解決了它。我明天會發布解決方案。 乾杯 – MayTheSchwartzBeWithYou 2015-03-04 23:44:47