Запрос одной самой старой записи для каждого идентификатора - PullRequest
0 голосов
/ 06 мая 2020

Предположим, что у меня есть база данных со столбцами foo, bar, creationdate и data.

Мне нужен запрос, который запрашивает первую строку, которая была создана (т.е. где дата создания - самая низкая ) для каждой уникальной комбинации foo и bar.

Например, для следующих строк:

+-----+-----+--------------+----------------+
| foo | bar | creationdate | data           |
+-----+-----+--------------+----------------+
| abc | def | 31.12.2019   | some data      |
+-----+-----+--------------+----------------+
| abc | def | 01.05.2020   | other data     |
+-----+-----+--------------+----------------+
| ghi | jkl | 04.05.2020   | more data      |
+-----+-----+--------------+----------------+
| ghi | jkl | 05.05.2020   | even more data |
+-----+-----+--------------+----------------+

Тогда желаемый результат:

+-----+-----+--------------+----------------+
| abc | def | 31.12.2019   | some data      |
+-----+-----+--------------+----------------+
| ghi | jkl | 04.05.2020   | more data      |
+-----+-----+--------------+----------------+

Что бы запрос SQL, который даст мне желаемый результат? Я использую Postgres.

Ответы [ 2 ]

3 голосов
/ 06 мая 2020

Обычно это делается с использованием проприетарного distinct on () в Postgres

select distinct on (foo,bar) foo, bar, creationdate, data
from the_table
order by foo,bar,creationdate;
2 голосов
/ 06 мая 2020

Попробуйте следующее, вы можете добиться этого, используя оконную функцию row_number(). Возможно, вам потребуется изменить формат creationDate. вот демо .

select
    foo,
    bar,
    creationDate
from
(
    select
        foo,
        bar,
        creationDate,
        row_number() over (partition by foo, bar order by creationDate) as rnk
    from yourTable
) val
where rnk = 1
...