Задать вопрос

SQL: Как вытащить уникальные записи по последней дате?

Привет! Как вытащить записи с уникальными именмиа файлов последней версии или последней даты создания для определенного юзера (т.е. filename не должен повторятся, а если повторяется выводить последнюю версию либо дату создания (не важно) ).
Есть таблица
| id  | filename | user_id | version | created_at |
| --- | -------- | ------- | ------- | ---------- |
| 1   | one      | 1       | 1       | 2022-01-01 |
| 2   | one      | 1       | 2       | 2022-01-02 |
| 3   | some     | 1       | 1       | 2022-01-03 |
| 4   | some     | 2       | 1       | 2022-01-03 |

В результате должно быть
| id  | filename | user_id | version | created_at |
| --- | -------- | ------- | ------- | ---------- |
| 2   |   one    |    1    |    2    | 2022-01-02 |
| 3   | some     | 1       | 1       | 2022-01-03 |

Попытался сделать через DISTINCT ON, но так получаю ошибку из-за сортировки.
SELECT DISTINCT ON (filename, user_id) *
			  FROM block
			  WHERE user_id = 1
			  ORDER BY created_at
  • Вопрос задан
  • 323 просмотра
Подписаться 1 Простой 4 комментария
Решение пользователя Slava Rozhnev К ответам на вопрос (2)
rozhnev
@rozhnev Куратор тега SQL
Fullstack programmer, DBA, медленно, дорого
В соответствии с наставлениями Akina :
with order_files as (
	select 
  		*, 
  		row_number() over (partition by filename order by version desc, created_at desc) rn
  	from files 
  	where user_id = 1
) select id, filename, user_id, version, created_at
from order_files where rn = 1
;

online sql editor
Ответ написан