Учитывая табличное действие (начало: ДАТА, длина: НОМЕР, тип: НОМЕР), со всеми уникальными записями, мне нужно выбрать (например, длину последнего действия с типом Y перед временем X:
select action.length
where action.type = Y
and action.start is the biggest, but not greater than X
Предлагаемое решение (улучшено):
with actionView as (select * from action where type = Y and time <= X)
select length
from actionView
where time = (select max(time) from actionView)
Но это все еще включает два выбора.
Что я хотел бы спросить: возможно ли выполнить какой-либо аналитический, иерархический или любой другой оракул-магии для этого запроса, чтобы улучшить его?
(Возможно, мне нужно что-то вроде этого алгоритма, но я не знаю, как выразить это в SQL:
savedAction.time = MinimalTime
foreach action in actions
if action.type = y and savedAction.time < action.time <= X
savedAction = action
return savedAction;
)