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.