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 ;

Я чувствую, что должен быть лучший способ вернуть относительные записи с помощью оконной функции, но с тех пор, как я на них посмотрел, прошло некоторое время.

Ответы на вопрос(3)

Ваш ответ на вопрос