Essayez celui-ci :
SELECT
DISTINCT ON (hive, moment)
*, DATE_TRUNC('day', instant AT TIME ZONE 'pst') AS moment
FROM dt_weight
ORDER BY hive, moment DESC, instant DESC;
Il utilise DISTINCT ON
pour ne garder que la première ligne pour chaque combinaison de hive
et jour. Pour nous assurer que la première ligne que nous conservons est également la plus récente, nous trions en outre dans l'ordre chronologique inverse.