создать промежуточный итог ненулевых дней в столбце - PullRequest
0 голосов
/ 07 мая 2020

У меня есть tableA с двумя столбцами, столбцом даты и столбцом значений. Я хотел бы написать запрос, который дал бы мне новый столбец «zeroDays», в котором подсчитывается количество дней, в течение которых столбец значений был 0 с момента последнего отличия от нуля. Может кто-нибудь подскажет, как это сделать с помощью запроса sql? похоже, что я смогу выполнить самостоятельное присоединение, но у меня проблемы с logi c.

tableA:

date value
12/1 1
12/2 0
12/3 0
12/4 2
12/5 0
12/6 1

tableB:

date value zeroDays
12/1 1     0
12/2 0     1
12/3 0     2
12/4 2     3
12/5 0     1
12/6 1     2

Ответы [ 2 ]

0 голосов
/ 07 мая 2020

Вы можете использовать кумулятивный максимум:

select date, value, 
       coalesce(datediff(date,
                         max(case when value <> 0 then date end) over (order by date rows between unbounded preceding and 1 preceding)
                        ), 0
               )
from t;

Примечание. Это возвращает 0 до первого ненулевого дня. Непонятно, что вы хотите в этом случае.

0 голосов
/ 07 мая 2020

Если вы используете MySql 8.0, следующее решение будет работать. вот демонстрация .

select
    date,
    value,
    sum(case 
            when n_val in (1, 0) then 1 
            when n_val > 1 then -n_val
        else
            0
        end
       ) over (order by date) as zeroDays
from
(
    select
        *,
        lag(value) over (order by date) as n_val
    from myTable

) val

order by
    date

Вывод:

| date | value | zeroDays |
| ---- | ----- | -------- |
| 12/1 | 1     | 0        |
| 12/2 | 0     | 1        |
| 12/3 | 0     | 2        |
| 12/4 | 2     | 3        |
| 12/5 | 0     | 1        |
| 12/6 | 1     | 2        |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...