Другой ответ, конечно, утверждает про треш. Но по мне задача звучит, как самый обычный и довольно простой запрос в базу данных, который даже без гугла пишется за пару минут. Если, конечно, работал с sql хотя бы на уровне джуна.
К сожалению, я работаю с ораклом, поэтому напишу на оракловом диалекте.
sysdate
- это текущие дата и время.
trunc
- округляет дату и время до даты.
trunc(sysdate) - 1
- это ноль часов вчерашнего дня.
select
parameter_column,
trunc(sysdate) as date_today,
max(case when date_column < trunc(sysdate) then value_column end) as value_today,
trunc(sysdate) as date_yesterday,
max(case when date_column >= trunc(sysdate) then value_column end) as value_yesterday
from target_table
where date_column >= trunc(sysdate) - 1
group by parameter_column
Запрос вычисляет максимальное значение параметров за сегодня и за вчера, если их было несколько. Если только один, то на выходе это единственное значение. Если не было, то NULL. Тут уж нужны детали о том, как именно устроены данные.
Если в таблице существует ровно одно значение параметра в один день, то запрос намного упрощается - нужна одна-единственная оконная функция, даже case-when руками писать не надо.
lag
к текущей строке подтягивает предыдущую строку, так что можно объединять значения из двух строк в одной.
select
parameter_column,
date_column as date_today,
value_column as value_today,
lag(date_column) over(partition by parameter_column order by date_column) as date_yeaterday,
lag(value_column) over(partition by parameter_column order by date_column) as value_yeaterday
from target_table
where date_column >= trunc(sysdate)
Если все же значений бывает много в одну дату, то надо будет фильтр настроить - отбирать строки в которых первая дата - сегодняшняя, а вторая - вчерашняя.
Вот уже два варианта решить задачу в первом приближении. Повторюсь, что это оракловый диалект sql.