आपने अपना मिनट तक समूहीकृत किया है। जो मैं मानने जा रहा हूं वह गलत है क्योंकि ये आमतौर पर दिन के हिसाब से किए जाते हैं। अगर मैं गलत हूं, तो आपको इसे वापस बदलना होगा।
SELECT DISTINCT contract_id, ts::date,
min(price) OVER w,
max(price) OVER w,
first_value(price) OVER w,
last_value(price) OVER w
FROM fill
WINDOW w AS (PARTITION BY contract_id, ts::date ORDER BY ts)
ORDER BY 1,2