SUMIF затем перезапустите счет - PullRequest
0 голосов
/ 28 февраля 2020

Как я могу сделать функцию SUMIF, чтобы она складывала значения, когда значение в другом столбце равно «False», но затем, когда оно достигает значения, равного «True», оно перезапускает счет снова, но включает значение первой «Истинной» встречи в СУММЕ расчета? Я также хотел бы, чтобы это суммировало значение в хронологическом порядке.

Я провел некоторое исследование и думаю, что мне нужно использовать перегородку и создать столбец с номером строки, чтобы вызвать весь номер строки = "1 ", но я не уверен, как это сделать.

Редактировать: сумма должна также включать значение" расстояния "для первого встречаемого" истинного "значения

Редактировать 2: Окончательно Я пытаюсь рассчитать среднее расстояние, которое проходит каждое транспортное средство, прежде чем оповещение сработает на «Истина», что означает, что его необходимо доставить в магазин для исправления. Возможно, есть лучший способ сделать это, чем я первоначально думал?

Извините за плохую формулировку ...

Ответы [ 2 ]

1 голос
/ 28 февраля 2020

Вы хотите определить группы. Похоже, вы хотите, чтобы определение было числом «истин» вплоть до заданной строки. Затем вы можете сделать накопительную сумму в каждой группе. Итак:

select t.*,
       sum(distance) over (partition by vehicleid, grp
                           order by date
                           rows between unbounded preceding and current row  
                          )    
from (select t.*,
             sum(case when alert = 'True' then 1 else 0 end) over
                 (partition by vehicleid
                  order by date
                  rows between unbounded preceding and current row
                 ) as grp
      from t
     ) t;

Здесь - это скрипта db <>, которая показывает, что этот код работает.

0 голосов
/ 28 февраля 2020

Вы правы, полагая, что можете использовать аналитическую функцию SUM. Нечто подобное сделает накопленную сумму для вас. Чтобы перезапустить SUM, когда предупреждение имеет значение «Истина», вы включаете «Изменить» в окне раздела и «Порядок по дате», чтобы выполнить заказ.

SELECT SUM(CASE WHEN alert = 'FALSE' THEN distance ELSE 0 END) OVER(PARTITIION BY alert order by date) cumm_sum,
       date, alert 
FROM Table
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...