PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

PostgreSQL :PLAGE ENTRE L'INTERVALLE "10 JOURS" ET LA LIGNE ACTUELLE

Vous pouvez utiliser ROW_NUMBER() pour extraire l'enregistrement le plus récent au cours des 10 derniers jours pour chaque élément :

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

Dans la sous-requête, la clause WHERE effectue le filtrage sur la plage de dates ; ROW_NUMBER() attribue un rang à chaque enregistrement dans des groupes d'enregistrements ayant le même item_id, avec l'enregistrement le plus récent en premier. Ensuite, la requête externe filtre simplement les enregistrements ayant le numéro de ligne 1.