如何在单个表中满足的每个条件中仅选择一个结果(无联接)?

时间:2019-01-15 15:51:01

标签: postgresql

我有一张桌子,其中包含不同汽车的所有旅行。我已将此表筛选为专门有多个停靠站的行程。现在我要做的就是让每辆车都停下来。

我所拥有的是:

Car ID
Date_depart
Date_arrive
Count (from a previous table creation)

我通过使用“汽车ID +日期出发”并计算单个date_depart中有多个date_arrives的地方来过滤此表。现在,我试图弄清楚如何只回到第一站,却完全陷入困境。在做横向连接X之外,以Z极限1等方法排序;我不知道如何只获取此表中的第一个结果。

以下是一些示例数据:

Car ID     Date_depart     Date_arrive    Count
949        2017-01-01      2017-01-05     2
949        2017-01-01      2017-01-09     2
1940       2017-01-09      2017-01-11     3
1940       2017-01-09      2017-01-14     3
1940       2017-01-09      2017-01-28     3
949        2018-04-19      2018-04-23     2
949        2018-04-19      2018-04-26     2

,预期结果将是:

Car ID     Date_depart     Date_arrive    Count
949        2017-01-01      2017-01-05     2
1940       2017-01-09      2017-01-11     3
949        2018-04-19      2018-04-23     2

有帮助吗?

1 个答案:

答案 0 :(得分:0)

您需要DISTINCT ON

SELECT DISTINCT ON (date_depart, car_id)
    *
FROM 
    trips
ORDER BY date_depart, car_id, date_arrive

这将为您提供每个组(date_depart, car_id)的第一行(有序)

demo: db<>fiddle