Есть кейс заданий для собеседование, с первыми двумя справился успешно, а вот третье не дается ни в какую.
сам текст задания.
Необходимо написать запрос, результатом которого будет таблица с покупками всех клиентов,
отсортированная в обратном хронологическом порядке.
В этой таблице должны отобразиться только те покупки, на которые хватит кредита.
Причем, в последней строке для каждого клиента должна быть указана не сумма покупки, а остаток кредита.
Решение должно быть в рамках одного запроса, без курсоров и временных таблиц.
Вводные:
declare @UserCredit table (
Id int IDENTITY(1,1),
UserId int,
Credit numeric(18,2)
);
insert into @UserCredit
values (1, 20), (2, 25);
declare @UserPurchase table (
Id int IDENTITY(1,1),
UserId int,
Cost numeric(18,2),
DT date,
Name varchar(50)
);
insert into @UserPurchase
values
(1, 5, '24.04.2016', 'sku1'),
(1, 6, '19.04.2016', 'sku2'),
(1, 7, '22.04.2016', 'sku3'),
(1, 8, '04.04.2016', 'sku4'),
(1, 4, '18.04.2016', 'sku5'),
(1, 5, '18.04.2016', 'sku6'),
(1, 2, '29.04.2016', 'sku7');
insert into @UserPurchase
values
(2, 5, '24.04.2016', 'sku1'),
(2, 6, '19.04.2016', 'sku2'),
(2, 7, '22.04.2016', 'sku3'),
(2, 8, '04.04.2016', 'sku4'),
(2, 4, '18.04.2016', 'sku5'),
(2, 2, '29.04.2016', 'sku7');
Результат запроса:
UserId DT Name Purchase/Rest
1 2016-04-29 sku7 2.00
1 2016-04-24 sku1 5.00
1 2016-04-22 sku3 7.00
1 2016-04-19 sku2 6.00
1 2016-04-18 sku6 0.00
2 2016-04-29 sku7 2.00
2 2016-04-24 sku1 5.00
2 2016-04-22 sku3 7.00
2 2016-04-19 sku2 6.00
2 2016-04-18 sku5 4.00
2 2016-04-04 sku4 1.00
Вот до чего я дошел самостоятельно
select c.Userid, p.dt, p.name, p.cost,
c.credit-sum(p.cost) OVER (PARTITION by c.userid ORDER by p.dt DESC, p.name DESC) as 'Purchase/Rest'
from @UserCredit as c
INNER JOIN @UserPurchase as p on p.UserId=c.UserId
ORDER by c.Userid, p.dt DESC;
но как мне впихнуть в один столбец и значение цены и результат over в нужной строчке категорически непонятно. Сразу говорю, это мой первый опыт общения с T-SQl. Цель выполнения - исключительно саморазвитие.На данную должность не претендую.
Настоятельно прошу готового решения не писать. просто натолкните на правильный путь.
Заранее благодарю!