2017-02-22 11 views
2

У меня есть ситуация, когда есть таблица истории билета. он сохраняет все действия, выполненные против билета. как написать запрос, который вернет первую запись и последнюю запись против конкретного билета.Как получить первую и последнюю строку с одним внешним ключом из таблицы

enter image description here

, например, в приведенной выше таблице Я один билет с идентификатором 78580. Я хочу, чтобы получить первую строку и последнюю строку, основанную на дату столбца.

ответ

2

Просто используйте 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; 
+0

еще один вопрос возможно, если я могу использовать это в присоединиться ... потому что я хочу, чтобы фильтровать по одному билету, а затем извлечь первый и последний ряд –

2

Использование мин и макс, чтобы получить первую и последнюю дату, сгруппированных по идентификатору билета.

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

сочетание обоих ответов решить мою проблему :) –