相关疑难解决方法(0)

PostgreSQL DISTINCT ON与不同的ORDER BY

我想运行此查询:

SELECT DISTINCT ON (address_id) purchases.address_id, purchases.*
FROM purchases
WHERE purchases.product_id = 1
ORDER BY purchases.purchased_at DESC
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

PG ::错误:错误:SELECT DISTINCT ON表达式必须与初始ORDER BY表达式匹配

添加address_id为第一个ORDER BY表达式会使错误无效,但我真的不想添加排序address_id.是否可以不通过订购address_id

sql postgresql sql-order-by distinct-on

186
推荐指数
5
解决办法
16万
查看次数

django独特和order_by

Foo.objects.all().distinct('foo') 不会删除重复项

Foo.objects.all().order_by().distinct('foo') 确实删除了它们。

我有Meta.ordering =('-field1','-field2)

是否Foo.objects.all().order_by().distinct('foo')尊重元排序?
即我想要由Meta.ordering排序的不同值,并且不确定如何执行。

Django文档令人困惑,没有解决order_by()没有任何参数的工作方式。

我正在使用PostgreSQL 9.3 btw。

In [28]: BestMomsdiaryThread.objects.all().values_list('momsdiary_thread__id', flat=True)
Out[28]: [3390, 5877, 5884, 6573, 5880, 6576, 6576, 6576, 6576, 6576, 6576, 6576, 6576, 6576, 6576, 6576, 6576, 6576, 6576, 6576, '...(remaining elements truncated)...']

In [29]: BestMomsdiaryThread.objects.not_deleted().order_by().distinct('momsdiary_thread').values_list('momsdiary_thread__id', flat=True)
Out[29]: [3390, 5877, 5880, 5884]

In [30]: BestMomsdiaryThread.objects.not_deleted().values_list('momsdiary_thread__id', flat=True)
Out[30]: [3390, 5877, 5884, 5880, 5877, 5880, 5884, 3390]


In [32]: BestMomsdiaryThread.objects.not_deleted().order_by('momsdiary_thread').distinct('momsdiary_thread').values_list('momsdiary_thread__id', flat=True)

ProgrammingError: SELECT DISTINCT ON expressions must match initial ORDER BY …
Run Code Online (Sandbox Code Playgroud)

django django-queryset

3
推荐指数
1
解决办法
1940
查看次数

ProgrammingError:在django中使用order_by和distinct时

我有一个如下的模型

class ProductScore(models.Model):
    client = models.ForeignKey(User)
    created = models.DateTimeField(default=datetime.datetime.now)
    score = models.IntegerField()
    scale = models.ForeignKey(Product) 
Run Code Online (Sandbox Code Playgroud)

截至目前,我正在使用以下查询来过滤掉上述模型中的重复项

scores = ProductScore.objects.filter(client=request.user).distinct('scale')
Run Code Online (Sandbox Code Playgroud)

通过上面的查询,它返回了唯一的结果,但是旧的(创建日期非常旧),我的意思是,例如,如果上面的表ProductScore有10个重复记录,其中5个是昨天创建的,其中5个是今天创建的,上面的查询返回5个昨天创建的唯一记录.

但我想要最近创建的记录(即今天)和独特的记录,所以我尝试如下

scores = ProductScore.objects.filter(client=request.user).order_by('created').distinct('scale')
Run Code Online (Sandbox Code Playgroud)

哪个不起作用,扔了一些 programming error exception

*** ProgrammingError: SELECT DISTINCT ON expressions must match initial ORDER BY expressions
LINE 1: SELECT DISTINCT ON ("product_productscore"."scale...
                            ^
Run Code Online (Sandbox Code Playgroud)

那么如何才能从上表中获得最近创建的独特记录?

django postgresql distinct sql-order-by django-models

2
推荐指数
1
解决办法
2540
查看次数