PostgreSQL: Jak zwracać wiersze w odniesieniu do znalezionego wiersza (wyniki względne)?

Wybacz mój przykład, jeśli to nie ma sensu. Spróbuję z uproszczonym, aby zachęcić do większego uczestnictwa.

Rozważmy tabelę w następujący sposób:

       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   |  

Jeśli szukasz rekordu zdt najbliżej dzisiaj bez przechodzenia, jaki byłby najlepszy sposób na zwrot3 rekordy wcześniej i7 rekordów po?

Postanowiłem wypróbować funkcje okienkowania:

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 ;

Czuję, że musi istnieć lepszy sposób na zwracanie względnych rekordów z funkcją okna, ale minęło trochę czasu, odkąd na nie spojrzałem.

questionAnswers(3)

yourAnswerToTheQuestion