Podría usar ROW_NUMBER() para extraer el registro más reciente dentro de los últimos 10 días para cada elemento:
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
En la subconsulta, la cláusula WHERE realiza el filtrado en el intervalo de fechas; ROW_NUMBER() asigna un rango a cada registro dentro de grupos de registros que tienen el mismo item_id, con el registro más reciente primero. Luego, la consulta externa solo filtra los registros que tienen el número de fila 1.