Вернуть вторую последнюю запись группы sql - PullRequest
0 голосов
/ 17 июня 2020

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

coworker            date
   1             2020.10.30
   1             2019.09.12
   1             2018.05.29
   2             2019.08.07
   3             2020.03.12
   3             2018.06.24
   4             2020.08.16

как я могу это получить:

coworker            date
   1             2019.09.12
   2             2019.08.07
   3             2018.06.24
   4             2020.08.16

результат должен быть второй самой новой записью коллеги, если их больше один или единственный подарок

Спасибо за любую помощь!

Ответы [ 2 ]

2 голосов
/ 17 июня 2020

Попробуйте следующее с оконной функцией row_number. Вот демонстрация .

select
    coworker,
    date
from
(
    select
        *,
        row_number() over (partition by coworker order by date) as rn,
        count(*) over (partition by coworker) as ttl
    from myTable
) subq
where (ttl > 1 and rn = ttl - 1) or (ttl = 1 and rn = 1);

Вывод:

| coworker | date       |
| -------- | ---------- |
| 1        | 2019-09-12 |
| 2        | 2019-08-07 |
| 3        | 2018-06-24 |
| 4        | 2020-08-16 |
0 голосов
/ 17 июня 2020

row_number() функция может быть полезной:

select coworker, date 
from (
    select coworker, date, 
    count(*) over (partition by coworker) as count, 
    row_number() over (partition by coworker order by date desc) as order
    from MyTable
) t
where count = 1 OR (count > 1 and order = 2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...