Вместо этого можно использовать row_number()
:
select t.*
from mytable t
where date in (date '2020-03-04', date '2020-03-05')
order by row_number() over(partition by trunc(date) order by date)
fetch first 1 row with ties
row_number()
помещает каждый день в другой раздел и упорядочивает записи каждого дня по возрастанию. Затем можно использовать предложение ограничения строки с параметром with ties
, чтобы получить первую запись в день.
Это более эффективно, чем решение union all
, поскольку оно сканирует таблицу только один раз.
Если вы делаете хотите union all
, то вы можете сделать:
select *
from (
(select * from tabl1 where date = date '2020-03-04' order by date fetch first 1 row)
union all
(select * from tabl1 where date = date '2020-03-05' order by date fetch first 1 row)
)