LINUX.ORG.RU

Запрос с датами к таблице postgresql

 ,


0

2

Есть таблица budget со значениями

----------------------------------------
| enter_date        |  amount          |
----------------------------------------
| 2023-07-01 00:41  | 500              |
| 2023-07-10 02:53  | 1500             |
| 2023-07-15 00:13  | 2500             |
| 2023-07-20 04:55  | 700              |
| 2023-08-03 00:53  | 200              |
| 2023-08-06 13:58  | 300              |
| 2023-08-20 17:18  | 500              |
| 2023-08-25 11:15  | 100              |
| 2023-09-02 00:11  | 15               |
| 2023-09-04 15:01  | 50               |
| 2023-09-14 18:16  | 80               |
| 2023-09-19 23:51  | 105              |
----------------------------------------

Нужно в каждом месяце получить значение для самой поздней записи этого месяца.

То есть для верхней таблицы результат по идее должен быть такой:

----------------------------------------
| enter_date        | amount           |
----------------------------------------
| 2023-07-20 04:55  | 700              |
| 2023-08-25 11:15  | 100              |
| 2023-09-19 23:51  | 105              |
----------------------------------------

Ответ на: комментарий от C

Row_number отсортировать в патриции и выбрать первую запись.

Select * from (
Select dat,amount,
 Row_number() over (patition by trunc(dat,'month') order by dat desc) as nrow
) t
Where nrow=1
Psilocybe ★★★★
()
Последнее исправление: Psilocybe (всего исправлений: 1)

Можно ещё такой финт ушами:

SELECT 
	 date_part('month',enter_date)
	,(string_to_array(max(enter_date || '>' || amount), '>'))[1]::timestamp
	,(string_to_array(max(enter_date || '>' || amount), '>'))[2]::int
FROM
	budget
GROUP BY 1;

Если верить EXPLAIN - стоимость запроса даже дешевле, чем у Максима.

Toxo2 ★★★★
()
Последнее исправление: Toxo2 (всего исправлений: 2)