找到每个密钥的最新符合条件的行

时间:2015-03-31 10:43:56

标签: sql postgresql greatest-n-per-group

我的数据库中有这个表:

enter image description here

我希望获得2列:id_chantierid_chef 条件:date_fin not null并且具有最后date_deb 因此,我想要获取的行数为111 我怎么能这样做?

3 个答案:

答案 0 :(得分:1)

SELECT DISTINCT ON (id_chef)
       id_chantier, id_chef
FROM   tbl
WHERE  date_fin IS NOT NULL
ORDER  BY id_chef, date_deb DESC NULLS LAST;

DISTINCT ON

的详细信息

根据数据分布,可能会有更快的解决方案:

答案 1 :(得分:0)

您可以使用rank()

执行此操作
select id_chantier, id_chef
from (select t.*, rank() over (order by date_deb desc) as rnk
      from table t
     ) t
where date_fin is not null and rnk = 1;

答案 2 :(得分:0)

- 我想得到关闭的网站列表(chantier)(date_fin不为空)

SELECT *
FROM ztable t
WHERE date_fin IS NOT NULL
AND NOT EXISTS (
    SELECT * FROM ztable nx
    WHERE nx.id_chantier = t.id_chantier -- Same site
    AND nx.date_fin > t.date_fin         -- more recent
    );