declare @UserCredit table ( Id int IDENTITY(1,1), UserId int, Credit numeric(18,2) ); insert into @UserCredit values (1, 20), (2, 25); - вопрос №4379697

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'); Необходимо написать запрос, результатом которого будет таблица с покупками всех клиентов, отсортированная в обратном хронологическом порядке. В этой таблице должны отобразиться только те покупки, на которые хватит кредита. Причем, в последней строке для каждого клиента должна быть указана не сумма покупки, а остаток кредита. Решение должно быть в рамках одного запроса, без курсоров и временных таблиц. declare @int float=0 select c.UserId,p.dt,p.name,p.dt,c.Credit, c.credit- coalesce(sum(p.cost) over (partition by c.userid order by c.userid, p.dt desc rows between unbounded preceding and current row ), 0) as [total] from @UserCredit c inner join @UserPurchase p on p.UserId=c.UserId order by c.userid,p.dt desc Как мне мой последний запрос доработать-чтобы исключить строки где сумма в минус ушла, не используя временных таблиц и в рамках 1 запроса
Ответов пока нет

Alexander

от 500 p.
Читать ответы
Посмотреть всех экспертов из раздела Технологии > Базы данных
Пользуйтесь нашим приложением Доступно на Google Play Загрузите в App Store