0
結合說我有以下數據:Django的1.4/1.5控制GROUP BY和HAVING
| id | user_id | time |
| 1 | 1 | 10.0 |
| 2 | 1 | 12.0 |
| 3 | 2 | 11.0 |
| 4 | 2 | 13.0 |
我要的是查詢該表,這樣我得到了MIN(time)
每user_id
:
| id | user_id | time |
| 1 | 1 | 10.0 |
| 3 | 2 | 11.0 |
嘗試使用當
SELECT id, user_id, time FROM table GROUP BY user_id HAVING MIN(time)
然而,:
所以我的SQL想這,Django會在任意的(錯誤的)領域GROUP BY
。例如參見下面的代碼和所得到的(簡化的)SQL:
>>> Table.objects.annotate(Min('time')).query
SELECT id, user_id, time, MIN(time) FROM table GROUP BY id, user_id, time
>>> Table.objects.values('id', 'time').annotate(Min('time')).query
SELECT id, time, MIN(time) FROM table GROUP BY id, time
產生的SQL是遠離我的希望的輸出。我目前正在通過使用原始SQL來解決這個問題,但是這首先破壞了使用ORM的目的。此外,所得的代碼是難以再利用爲正常.filter()
不能應用。
有關於這種類型的查詢類似的問題,但是他們都比較老,因爲1.3不包括改變Django的。
只是用戶'用戶'列按'Table.objects.values('用戶')分組。註釋(最小('時間'))'? –
這並沒有給我結果的ID,只有USER_ID和時間。 – bouke
'Table.objects.values( '用戶')。註釋(民( '時間'))值( '身份證', '用戶', '時間')'這應該工作 –