Упорядочить строки по date
и id
и взять только первую строку для date
.
Затем удалите те, где цена равна NULL.
SELECT *
FROM (SELECT DISTINCT ON (date)
id, price, date
FROM mytable
ORDER BY date, id
) AS q
WHERE price IS NOT NULL;
@ Лоренц, позвольте мне дать немного больше объяснений
select distinct on (<fldlist>) * from <table> order by <fldlist+>;
равно гораздо более сложному запросу:
select * from (
select row_number() over (partition by <fldlist> order by <fldlist+>) as rn,*
from <table>)
where rn = 1;
А здесь <fldlist>
должна быть начальной частью (или равной) <fldlist+>