有很多類似的帖子,但沒有一個完全符合我想要的內容。我得到一個獨特的必須使用相同的字段作爲order_by,這很好。使用PostgreSQL進行命令編程並且在Django上有所不同
所以我有以下查詢:
q = MyModel.objects.order_by('field1', 'field2', '-tstamp').distinct('field1', 'field2')
最後,我想找到在表中的field1
和field2
所有組合的最新條目。 order_by
做我認爲應該的,這很好。但是,當我做distinct
我得到以下錯誤。
ProgrammingError: SELECT DISTINCT ON expressions must match initial ORDER BY expressions
歸根結底,這似乎是一個SQL問題(而不是Django的一個)。然而,看看django docs不同,它顯示什麼可以和不可以工作。它確實說
q = MyModel.objects.order_by('field1', 'field2', '-tstamp').distinct('field1')
將工作(...和它確實)。但我不明白,當我按照與order_by
相同的順序添加field2
時,我仍得到相同的結果。任何幫助將不勝感激
編輯:我也注意到,如果我做
q = MyModel.objects.order_by('field1', 'field2', '-tstamp').distinct('field1', 'field2', 'tstamp') # with or without the - in the order_by
它仍然引起了同樣的錯誤,儘管文檔建議這應該只是罰款
既然你不顯示'MyModel',我們可以假設'field1','field2'和'tstamp'相對普通的領域(沒有ForeignKey或這樣的)? – Evert
您的第一個示例會導致顯示的錯誤。然後,你說你的第二個例子:「當我按照與order_by相同的順序添加field2時,我仍然得到相同的結果。」同樣的結果,你的意思是與第一個例子相同的*錯誤*或者你的意思是第二個例子的(返回)結果? – Evert
可能值得嘗試展示[Django生成的SQL](https://docs.djangoproject.com/en/1.9/faq/models/#how-can-i-see-the-raw-sql-queries -django-是運行)。 – Evert