I have a table like the following:
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
how can I get this:
coworker date 1 2019.09.12 2 2019.08.07 3 2018.06.24 4 2020.08.16
the result should be the second newest record of a coworker if there’s more than one, or the only present
Thanks for any help!
Advertisement
Answer
Try the following with window function row_number. Here is the demo.
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);
Output:
| coworker | date | | -------- | ---------- | | 1 | 2019-09-12 | | 2 | 2019-08-07 | | 3 | 2018-06-24 | | 4 | 2020-08-16 |