簡體   English   中英

在PostgreSQL和PostgreSQL上按順序排序的編程錯誤

[英]Programming error with order by and distinct on Django with PostgreSQL

有很多類似的帖子,但都沒有完全達到我想要達到的目標。 我知道不同的必須使用與order_by相同的字段,這很好。

所以我有以下查詢:

q = MyModel.objects.order_by('field1', 'field2', '-tstamp').distinct('field1', 'field2')

最終,我試圖在表中找到field1field2所有組合的最新條目。 order_by做了我認為應該做的事,這很棒。 但是,當我進行distinct ,會出現以下錯誤。

ProgrammingError: SELECT DISTINCT ON expressions must match initial ORDER BY expressions

最終,這似乎是一個SQL問題(而不是Django問題)。 但是,查看django 文檔以了解它們的不同之處,它顯示了哪些可以工作,哪些不能工作。 它確實說

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

它仍然會引發相同的錯誤,盡管文檔建議這樣做應該可以

能夠通過在order_by()中使用pk來使查詢正常運行

q = MyModel.objects.order_by('field1__pk', 'field2__pk', '-tstamp').distinct('field1__pk', 'field2__pk')

顯然,當它們不是普通類型時,orderby不會發揮很好的作用。 但是使用對象的pk似乎有效

測試一下:

q = MyModel.objects.order_by('field1__id', 'field2__id', '-tstamp').distinct('field1__id', 'field2__id')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM