如何在django查询

时间:2015-11-30 07:21:57

标签: python postgresql greatest-n-per-group django-class-based-views

我需要为每个人最近添加记录。我有一张如下表

  id     person     date     task
   1      xxx    2015-11-18    3
   2      yyy    2015-11-17    2
   3      yyy    2015-11-19    2
   4      xxx    2015-11-30    1

我想在queryset

中得到这样的输出
   id     person     date     task
    3      yyy    2015-11-19    2
    4      xxx    2015-11-30    1
每个人都有两个记录。但我需要最近为django queryset中的每个人添加记录。

提前致谢

2 个答案:

答案 0 :(得分:1)

这是关于正确的查询,但您必须按照 doc 中的说明观看 order_by distinct 的联合使用:{ {3}}

Record.objects.order_by('person', '-date').distinct('person')

答案 1 :(得分:0)

在PostgreSQL中你可以使用

Window Function:over()

   SELECT id
        ,person
        ,dte
        ,task
    FROM (
        SELECT *
            ,row_number() OVER (
                PARTITION BY person ORDER BY dte DESC
                ) rn
        FROM rt
        ) t
    WHERE rn = 1

DISTINCT Clause

SELECT DISTINCT ON (person) id
    ,person
    ,dte
    ,task
FROM rt
ORDER BY person
    ,dte DESC

SQLFIDDLE-DEMO