PostgreSQL: как вернуть строки относительно найденной строки (относительные результаты)?
Прости мой пример, если он не имеет смысла. Я собираюсь попробовать с упрощенным, чтобы поощрить большее участие.
Рассмотрим таблицу, подобную следующей:
dt | mnth | foo
--------------+------------+--------
2012-12-01 | December |
...
2012-08-01 | August |
2012-07-01 | July |
2012-06-01 | June |
2012-05-01 | May |
2012-04-01 | April |
2012-03-01 | March |
...
1997-01-01 | January |
Если вы ищете запись сdt
ближайший к сегодняшнему дню без перехода, что было бы лучшим способом также вернуть3 records beforehand а также7 records after?
Я решил попробовать оконные функции:
WITH dates AS (
select row_number() over (order by dt desc)
, dt
, dt - now()::date as dt_diff
from foo
)
, closest_date AS (
select * from dates
where dt_diff = ( select max(dt_diff) from dates where dt_diff <= 0 )
)
SELECT *
FROM dates
WHERE row_number - (select row_number from closest_date) >= -3
AND row_number - (select row_number from closest_date) <= 7 ;
Я чувствую, что должен быть лучший способ вернуть относительные записи с помощью оконной функции, но с тех пор, как я на них посмотрел, прошло некоторое время.