SQL объединяет несколько записей в одну строку по дате - PullRequest
1 голос
/ 08 апреля 2019

Я хотел бы найти промежуток времени между последовательными (в соответствии с полем даты) записями в таблице журнала ...

Например,

enter image description here

Это записи журнала для процессов, которые я запускаю каждый день.Я хочу сделать отчет с различными полями, такими как дата начала и окончания, прошедшие минуты и т. Д., Но чтобы упростить «ядро» моей проблемы, я думаю, что мне нужно выяснить, как получить эти начальные и конечные записи (отмеченныеполе комментария) в одну строку, которая будет представлять 1 прогон процесса.Я попробовал сводную таблицу, но я не смог заставить ее работать, так как я не мог использовать «Упорядочить по дате» с Pivot, что, я думаю, мне понадобится для того, чтобы агрегат «Макс» был полезен,Я попытался сгруппировать ... Я почти заставил его работать с самостоятельным объединением, используя "Row_Number ()" и присоединяя Row_Number () к RowNumber + 1 (поскольку каждое время запуска отключено на 1 строку по сравнению с последним запуском..)

но потом я нашел несколько записей, где это было не так.Я полагаю, что эта базовая задача выполнялась много раз, но я еще не нашел своего решения.

Как я могу просто выполнить каждый запуск процесса (определяется «началом» и, предположительно, ближайшей «датой окончания»)и объединить их в одну строку, чтобы я мог делать дополнительные агрегаты?

1 Ответ

0 голосов
/ 08 апреля 2019

Если «следующая» запись всегда является конечной, вы можете сделать:

select t.*
from (select t.*,
             lead(log_date) over (order by log_date) as end_log_date
      from t
     ) t
where comment = 'Start tf_crediting : FULL';

Если вы хотите следующую дату окончания, то совокупный условный минимум делает то, что вы хотите:

select t.*
from (select t.*,
             min(case when comment = 'end Crediting' then log_date end) over (order by log_date desc) as end_log_date
      from t
     ) t
where comment = 'Start tf_crediting : FULL';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...