У меня есть база данных, которая принимает отчеты журнала от нескольких клиентов (компьютеров). Каждая строка содержит имя клиента, некоторые данные и столбец отметки времени со временем, когда журнал поступил в БД.
Я хочу рассчитать (в ретроспективе, для дальнейшего анализа) разницу во времени выполнения между двумяпоследние времена и сохраните это в столбце "time-diff". Затем это переводится как «продолжительность» этой записи журнала.
Я уже решил, что для будущих записей по триггеру перед вставкой, но мне нужно рассчитать это для всех записей в истории.
Пожалуйстаобратите внимание, что в таблице с журналами есть записи cca 1M .
Я могу сделать это "select", используя код ниже. Я борюсь с тем, чтобы сохранить разницу в правильном ряду. (timestamp_diff(a, b) -> a - b
является моей пользовательской функцией, проверено, возвращает разницу в секундах).
До сих пор я тестировал выбор только на 2 компьютерах, их более 100.
select computername,
datetime,
timestamp_diff(datetime, lag(datetime) over (partition by computername order by datetime))
from table_with_logs
where computername in ('AAAA', 'BBBB')
Таблица должна выглядеть примерно так:
COMPUTERNAME DATETIME TASK DIFFERENCE
-------------------------------------------------------------------------
AAAA 25.09.19 13:51:26,000000000 +02:00 IDLE 121
AAAA 25.09.19 13:53:27,000000000 +02:00 COMPUTING 121
AAAA 25.09.19 13:55:27,000000000 +02:00 IDLE 120
AAAA 25.09.19 13:57:28,000000000 +02:00 COMPUTING 121
AAAA 25.09.19 13:59:29,000000000 +02:00 OFFLINE 121
Я в основном ищу правильное выражение UPDATE
.
В псевдокоде python это будет выглядеть примерно так:
for row in table:
previousRow.diff = row.time - previousRow.time
Все это так, чтобы я мог легко сделать:
SELECT computername, task, SUM(DIFFERENCE)
FROM table_with_logs
GROUP BY computername, task
Заранее большое спасибо за вашу помощь.