Рассчитать текущие итоговые и промежуточные итоги - PullRequest
0 голосов
/ 25 октября 2018

В следующей таблице мне нужно получить промежуточную сумму, а также информацию о промежуточной сумме.

running total and details of running total

Например, в этой таблице для personal_id = 12

Сводная сторона:

  • в 2018-10-19 21: 23: 00.567 Transaction_Type назначается и MACHINECOUNT = 1, поэтому общее количество машинназначенный к этому времени 1

  • в 2018-10-19 21: 23: 17.077 Transaction_Type назначается и MACHINECOUNT = 1, и общее количество машин, назначенных к этому времени, составляет 2

  • в 2018-10-19 21: 26: 33.513 Transaction_Type назначается и MACHINECOUNT = 1, и общее количество машин, назначенных к этому времени, составляет 3

  • в 2018 году-10-19 21: 26: 58.980 Transaction_Type не назначен и MACHINECOUNT = 1, а общее количество машин, назначенных к этому времени, равно 2 и т. Д.

на стороне сведений:

  • во 2-м ряду, количество компьютеров было 2, поэтому мне нужно, какие batch_run_step_ids включены, чтобы получитьcount

  • в 3-м ряду, машинный счет был 3, поэтому мне нужно, какие шаги пакетного запуска включены, чтобы получить счет и так далее

summary

Мне удалось получить сводку с использованием функции суммирования по персоналу, но мне нужно получить подробную информацию о количестве машин.Например, на итоговом снимке экрана для второго ряда, назначенного по времени, задано 2, и мне нужны подробности об этих двух машинах, т. Е. Какие шаги / строки включены для получения этой суммы.

expected details for first four records in summary

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Если я правильно понимаю, вам нужна совокупная условная сумма:

select t.*,
       sum(case when transaction_type = 'assign' then 1
                when transaction_type = 'unassign' then -1
                else 0
           end) over (partition by personnel_id
                      order by date_time
                     ) as machine_assigned_by_time
from t;
0 голосов
/ 25 октября 2018

Для первого запроса вам необходимо использовать SUM() Функция окна для поля MACHINECOUNT в вашем select выражении, как показано ниже:

Сводный запрос:

select
    [your_columns],
    sum((case Transaction_Type when 'assign' then MACHINECOUN when 'unassign' then MACHINECOUN * -1 end))
    over(partition by personnel_id order by DATE_TIME)  as [RunningTotal]
from
    [your_table]
...