【问题标题】:Django order_by() is not working along with distinct()Django order_by() 不能与 distinct() 一起使用
【发布时间】:2021-05-21 16:19:06
【问题描述】:

如何将 order_by()distinct() 结合使用?

我有多个具有不同 end_time 的相同 run_id 并尝试过滤不同的 run_id 并按 end_time 排序

data = list(table_name.objects.filter(experience=experience)\
.values('run_id', 'end_time').distinct('run_id').order_by('-end_time'))

以下是错误:-

django.db.utils.ProgrammingError: SELECT DISTINCT ON expressions must match initial ORDER BY expressions

但是,following ORM works fine without order_by 但我想要最新的 end_time

data = list(table_name.objects.filter(experience=experience).values('run_id', 'end_time').distinct('run_id'))

【问题讨论】:

    标签: django django-models sql-order-by django-filters django-aggregation


    【解决方案1】:

    distinct() 中的列也必须在 order_by() 中

    data = list(table_name.objects.filter(experience=experience)\
    .values('run_id', 'end_time').distinct('run_id').order_by('run_id', '-end_time'))
    

    【讨论】:

    • 试过这个,但是这个不是按最新的end_time排序的,有点混
    • @Mahesh 当然是的,因为它们首先由run_id 排序(这是必要的,因为您想对其进行区分)。
    • 谢谢。这工作data = list(table_name.objects.filter(experience=experience).values('run_id', 'end_time').distinct('end_time').order_by('end_time', 'run_id'))[::-1]
    【解决方案2】:

    什么是数据库?

    试试:

    data = list(table_name.objects.filter(experience=experience)\
    .values('run_id', 'end_time').distinct('run_id').order_by('run_id', '-end_time'))[::1]
    

    【讨论】:

    • 不工作....我的意思是它没有按最新的 end_time 排序
    • 出现任何错误? data = list(table_name.objects.filter(experience=experience)\ .values('run_id', 'end_time').distinct('run_id').order_by('run_id', '-end_time'))[::1 ]
    • 没有错误,得到run_id和end_time的不同值,但是按照最近的end_time排序
    • 这工作:) data = list(table_name.objects.filter(experience=experience).values('run_id', 'end_time').distinct('end_time').order_by('end_time', 'run_id'))[::-1]
    猜你喜欢
    • 2014-01-02
    • 1970-01-01
    • 2016-12-17
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    • 2014-09-11
    相关资源
    最近更新 更多