Как прокомментировал Питер Шнайдер, разумным вариантом было бы использовать оконную функцию lead()
для восстановления fromdate
следующей записи для того же id
:
select
t.*,
lead(fromdate) over(partition by id order by fromdate) todate
from mytable t
Обратите внимание, что приВ этом методе для записи, имеющей наибольшее значение fromdate
для каждого id
, будет установлено todate
на null
. Если вы хотите назначить дату окончания по умолчанию, вы можете использовать coalesce()
.
. Вы можете поместить это в представление:
create view myview as
select
t.*,
lead(fromdate) over(partition by id order by fromdate) todate
from mytable t
И затем вы можете запросить представление для текущей цены. данного предмета:
select *
from myview
where
id = ?
and getdate() >= fromdate
and (todate is null or getdate() < todate)