Declare @sec_temp table
(
sec_no varchar(10),
amount money,
price_date date
)
insert @sec_temp
values
('123ABC', 25, '2011-01-20'),
('123ABC', 25, '2011-01-19'),
('123ABC', 25, '2011-01-18'),
('123ABC', 20, '2011-01-17'),
('123ABC', 20, '2011-01-15'),
('123ABC', 22, '2011-01-13'),
('456DEF', 22, '2011-01-13'),
('456DEF', 30, '2011-01-11')
Проблема: запрос T-SQL для получения предыдущей цены товара, отклонения от текущей цены и даты предыдущей цены.«Предыдущая цена» определяется как дата, когда сумма для элемента изменилась до текущей суммы
Результат:
**sec_no current_Amount Current_Price_Date No_of_days_at_Current_price prior_amount prior_price_date No_of_days_at_prior_price**
123ABC 20 2011-01-20 19 20 2011-01-15 3
456DEF 22 2011-01-13 24 30 2011-01-11 2
Текущий код (получает данные для current_price_date и current_amount):
(благодаря cyberkiwi)
select
sec_no,
amount,
No_of_days_at_price = 1 + DATEDIFF(d, min(price_date), max(price_date))
from (
select *,
ROW_NUMBER() over (partition by sec_no order by price_date desc) rn,
ROW_NUMBER() over (partition by sec_no, amount order by price_date desc) rn2
from @sec_temp
) X
WHERE rn=rn2
group by sec_no, amount