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.