В основном мне нужен результат - диапазоны изменения цены для каждого товара, мне нужно извлечь цену товара и дату транзакции с датой окончания, установленной на следующий раз, когда цена товара будет изменена.
Учитывая это таблица
create table myTable(id int, Price decimal(10,6), StartDate datetime)
insert into myTable
select 1, 92.576842, '2018-04-06 23:00:00.000' union all
select 1, 92.700000, '2018-04-12 21:39:00.000' union all
select 1, 92.700000, '2018-04-26 00:01:00.000' union all
select 1, 92.700000, '2018-06-04 23:20:00.000' union all
select 1, 116.700000, '2018-07-04 21:38:00.000' union all
select 1, 116.700000, '2018-08-01 22:31:31.000' union all
select 1, 118.610597, '2018-08-13 23:34:22.000' union all
select 1, 116.700000, '2018-09-05 23:52:28.000'
И этот запрос
select id, Price, StartDate, LEAD(StartDate) over (partition by id order by id, StartDate) endDate
from myTable
order by id, StartDate
Результаты запроса:
id Price StartDate endDate
1 92.576842 2018-04-06 23:00:00.000 2018-04-12 21:39:00.000
1 92.700000 2018-04-12 21:39:00.000 2018-04-26 00:01:00.000
1 92.700000 2018-04-26 00:01:00.000 2018-06-04 23:20:00.000
1 92.700000 2018-06-04 23:20:00.000 2018-07-04 21:38:00.000
1 116.700000 2018-07-04 21:38:00.000 2018-08-01 22:31:31.000
1 116.700000 2018-08-01 22:31:31.000 2018-08-13 23:34:22.000
1 118.610597 2018-08-13 23:34:22.000 2018-09-05 23:52:28.000
1 116.700000 2018-09-05 23:52:28.000 NULL
как получить только самую раннюю дату для последовательного Price
экземпляра
результат должен быть таким, как показано ниже - обратите внимание, что последняя строка дублируется Price
все же требуется
id Price StartDate EndDate
1 92.576842 2018-04-06 23:00:00.000 2018-04-12 21:39:00.000
1 92.700000 2018-04-12 21:39:00.000 2018-07-04 21:38:00.000
1 116.700000 2018-07-04 21:38:00.000 2018-08-13 23:34:22.000
1 118.610597 2018-08-13 23:34:22.000 2018-09-05 23:52:28.000
1 116.700000 2018-09-05 23:52:28.000 NULL