Получить запись из таблицы? - PullRequest
0 голосов
/ 07 мая 2020

У меня есть таблица с такими данными

Связь сопоставления

1 task_id сопоставлен с несколькими task_detail_id ( 1 для многих )

Task_detail_id  Task_id    Creation_date
1                20         2020-05-02 20:28:23.354
2                21         2020-05-02 20:28:23.354
3                22         2020-05-02 19:28:23.354
4                22         2020-05-02 18:28:23.354
5                22         2020-05-02 17:28:23.354
6                22         2020-05-02 16:28:23.354
7                22         2020-05-02 15:28:23.354
8                23         2020-05-02 10:28:23.354
9                24         2020-05-02 09:28:23.354
10               24         2020-05-02 08:28:23.354
11               24         2020-05-02 07:28:23.354

Я хочу пройти по таблице и получить запись, как если бы один и тот же task_id существовал более 2 раз, а затем получить две верхние (последние) записи для этого task_id

Пример вывода

Task_detail_id  Task_id         Creation_date
1                 20            2020-05-02 20:28:23.354
2                 21            2020-05-02 20:28:23.354
3                 22            2020-05-02 19:28:23.354
4                 22            2020-05-02 18:28:23.354
8                 23            2020-05-02 10:28:23.354
9                 24            2020-05-02 09:28:23.354
10                24            2020-05-02 08:28:23.354

1 Ответ

0 голосов
/ 07 мая 2020

Обычно это делается с помощью оконной функции:

select task_detail_id, task_id, creation_date
from (
  select task_detail_id, task_id, creation_date, 
         row_number() over (partition by task_id order by creation_date desc) as rn
  from data
) t
where rn <= 2
order by task_detail_id, task_id;

Онлайн-пример

...