2017-08-19 86 views
1

我想獲取所有最後的記錄基於id,按月排序。Django查詢獲得最後一條記錄通過

這給了我最後的記錄,

qs = Cashflow.objects.filter (acct_id = a.id).order_by('-month')[:1] 

這組帳戶,

qs = Cashflow.objects 
    .filter (acct_id = a.id) 
    .values ('acct_id') 
    .annotate (count = Count ('acct_id')) 
    .values ('acct_id', 'count') 
    .order_by () 

我怎麼怎麼可以結合這兩個查詢到嗎?

按acct_id分組,按「月」排序並獲取最後一條記錄。

這甚至可能嗎?感謝

編輯:

這是什麼,我試圖做的SQL版本。

select * 
    from cashflow t 
    inner join (
     select acct_id, max (`month`) as MaxDate 
     from cashflow 
      where acct_id IN (1,2,3,...) 
     group by acct_id 
    ) tm on t.acct_id = tm.acct_id and t.month = tm.MaxDate 
    order by acct_id 

這可以在純Django中完成,我應該只是做一個原始查詢嗎?

歡呼聲。

回答

0

相反.order_by('-month')[:1]最好是使用.order_by('month').last().order_by('-month').first()(或earliest/latest的日期)。

當然分組時,你可以使用order_by

last_record = Cashflow.objects \ 
    .values('acct_id') \ 
    .annotate(count=Count('id')) \ 
    .order_by('month') \ 
    .last() 
+0

它通常是更好地解釋一個解決方案,而不是僅僅張貼的匿名代碼的某些行。你可以閱讀[我如何寫一個好的答案](https://stackoverflow.com/help/how-to-answer),還有[完全解釋基於代碼的答案](https://meta.stackexchange.com /問題/ 114762 /解釋-entirely-%E2%80%8C%E2%80%8Bcode基於-答案)。 –

+0

@MassimilianoKraus謝謝你的評論,我補充說明。 –

+0

好得多。 +1的努力。 –