PostgreSQL: Wie werden Zeilen in Bezug auf eine gefundene Zeile zurückgegeben (relative Ergebnisse)?

Vergib mein Beispiel, wenn es keinen Sinn ergibt. Ich werde versuchen, mit einer vereinfachten Methode mehr Beteiligung zu fördern.

Betrachten Sie eine Tabelle wie die folgende:

       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   |  

Wenn Sie nach der Aufzeichnung mit suchendt Englisch: www.mjfriendship.de/en/index.php?op...41&Itemid=32 Was wäre der beste Weg, um auch das, was heute am nächsten ist, zurückzugeben?3 Datensätze im Voraus und7 Datensätze nach?

Ich habe beschlossen, Fensterfunktionen auszuprobieren:

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 ;

Ich habe das Gefühl, dass es eine bessere Möglichkeit geben muss, relative Datensätze mit einer Fensterfunktion zurückzugeben, aber es ist einige Zeit her, seit ich sie mir angesehen habe.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage