Рассчитать пополнение на ежедневное использование - PullRequest
3 голосов
/ 25 марта 2019

У меня есть данные для ежедневного использования, как показано ниже.

enter image description here

Мне нужно пополнять продукт для каждого 2000 использования. Это ожидаемый результат.

enter image description here

Я пытаюсь использовать SUM OVER запрос, чтобы получить ежедневное общее предыдущее использование, и пытаюсь разделить, чтобы получить кратное 2000.

SELECT Date, Usage,
       SUM(Usage) OVER(ORDER BY Date) AS DailyTotal,
       CAST(SUM(Usage) OVER(ORDER BY Date) / 2000 AS INT) Div
FROM Transaction

enter image description here

Но я до сих пор не могу найти, на какую дату мне нужно пополнить счет. Как я могу сделать что-то подобное?

Ответы [ 2 ]

3 голосов
/ 25 марта 2019

Вы можете попробовать использовать LAG оконную функцию с подзапросом.

Настройка схемы MS SQL Server 2017 :

create table [Transaction]([Date] date, usage int);

insert into [Transaction] values
('2017-01-01',1373),
('2017-01-02',1387),
('2017-01-03',1509),
('2017-01-04',1523),
('2017-01-05',1537);

Запрос 1 :

SELECT Date, 
       Usage,
       DailyTotal,
       (CASE WHEN LAG(Div,1,Div) OVER(ORDER BY Date) <> Div THEN 1 ELSE 0 END) div
FROM (
    SELECT Date, Usage,
           SUM(Usage) OVER(ORDER BY [Date]) AS DailyTotal,
           CAST(SUM(Usage) OVER(ORDER BY [Date]) / 2000 AS INT) Div
    FROM [Transaction]
)t1

Результаты

|       Date | Usage | DailyTotal | div |
|------------|-------|------------|-----|
| 2017-01-01 |  1373 |       1373 |   0 |
| 2017-01-02 |  1387 |       2760 |   1 |
| 2017-01-03 |  1509 |       4269 |   1 |
| 2017-01-04 |  1523 |       5792 |   0 |
| 2017-01-05 |  1537 |       7329 |   1 |
1 голос
/ 25 марта 2019

попробуйте ниже, используя row_number() and comparison

DEMO

select *,case when DailyTotal<2000*(case when rn=1 then 1 else rn-1 end) then 0 else 1 end
as refill from
(
SELECT Dateval, Usage,
       SUM(Usage) OVER(ORDER BY Dateval) AS DailyTotal,
       row_number() over(order by dateval) rn
FROM t1
)AA

ВЫВОД:

Dateval             Usage   DailyTotal  rn  refill
01/01/2017 00:00:00 1373    1373        1   0
02/01/2017 00:00:00 1387    2760        2   1
03/01/2017 00:00:00 1509    4269        3   1
04/01/2017 00:00:00 1523    5792        4   0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...