如何从表中获取一个外键的第一行和最后一行

时间:2017-02-22 03:56:38

标签: sql postgresql

我的情况是有一张票证历史表。它保存了针对故障单执行的所有操作。如何编写一个查询,该查询将返回特定故障单的第一条记录和最后一条记录。

enter image description here

例如在上表中我有一张ID为78580的票证。我想根据日期列获取第一行和最后一行。

2 个答案:

答案 0 :(得分:3)

只需使用row_number()

select t.*
from (select t.*,
             row_number() over (partition by ticket_id order by action_when asc) as seqnum_a,
             row_number() over (partition by ticket_id order by action_when desc) as seqnum_d
      from tickets t
     ) t
where seqnum_a = 1 or seqnum_d = 1;

答案 1 :(得分:2)

使用min和max获取第一个和最后一个日期,按票证ID分组。

SELECT ticket_id, min(action_when), max(action_when)
FROM table_name
GROUP BY ticket_id;