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.