我的情况是有一张票证历史表。它保存了针对故障单执行的所有操作。如何编写一个查询,该查询将返回特定故障单的第一条记录和最后一条记录。
例如在上表中我有一张ID为78580的票证。我想根据日期列获取第一行和最后一行。
答案 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;