PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL:BEREICH ZWISCHEN INTERVALL '10 DAY' UND AKTUELLER ZEILE

Sie könnten ROW_NUMBER() verwenden, um den neuesten Datensatz innerhalb der letzten 10 Tage für jedes Element herauszuziehen:

SELECT * 
FROM (
    SELECT
        DATE(datetime),
        item_id,
        price AS most_recent_price_within_last_10days,
        ROW_NUMBER() OVER(PARTITION BY item_id ORDER BY datetime DESC) rn
    FROM ...
    WHERE datetime > NOW() - INTERVAL '10 DAY'
) x WHERE rn = 1

In der Unterabfrage filtert die WHERE-Klausel nach dem Datumsbereich; ROW_NUMBER() weist jedem Datensatz innerhalb von Gruppen von Datensätzen mit derselben item_id einen Rang zu, wobei der jüngste Datensatz zuerst kommt. Dann filtert die äußere Abfrage nur Datensätze mit der Zeilennummer 1 heraus.