Я заменяю процесс, который запускается каждую ночь. Процесс добавляет в таблицу незавершенного производства информацию о том, какие изменения в статусе (имеется около восьми статусов) произошли для каждого открытого дела в течение дня, а затем статус конца дня для всех открытых дел или дел, которые закрыли этот день (так что есть флаг конца дня).
Таблица вывода выглядит как
Run Date CaseNr Status StatusStart StatusEnd EndOfDay
4/01/19 DD-55 Review 3/17/19 08:44 04/01/19 17:44 0
4/01/19 DD-55 Investigation 4/01/19 12:44 NULL 0
4/01/19 DD-55 Investigation 4/01/19 12:44 NULL 1
4/01/19 DD-29 Investigation 2/15/19 07:15 4/01/19 12:34 0
4/01/19 DD-29 ContactCust 4/01/19 12:34 4/01/19 12:36 0
4/01/19 DD-29 Payout 4/01/19 12:37 NULL 0
4/01/19 DD-29 Payout 4/01/19 12:37 NULL 1
Я должен воссоздать это как SP, который принимает начальную и конечную дату, а затем возвращает все вышеперечисленное между этими датами, поэтому, если я получу 04/22/19/19/19, я получу все изменения открыть дела плюс все дела, которые закрылись 20-го числа, плюс статус всех дел в конце 04/20, затем то же самое для 4/21, затем то же самое для 4 / 22.
Некоторые дела открываются и закрываются за один день, некоторые остаются в одном статусе в течение нескольких месяцев.
Таблицы, из которых я берусь за основу, представляют собой таблицу дел, в которой показаны все текущие состояния всех дел, и таблицу истории дел, в которой указаны время начала и окончания каждого статуса для каждого дела, поэтому:
CaseNr Status StatusStart StatusEnd
DD-21 Review 4/01/19 08:44 04/03/19 17:44
DD-21 Investigation 4/03/19 12:44 NULL
DD-87 Investigation 4/06/19 07:15 04/08/19 12:22
DD-87 ContactCust 4/08/19 12:23 04/09/19 17:44
DD-16 Payout 4/18/19 09:44 04/03/19 17:44
и т. Д.
Я подумываю о том, чтобы разделить его на две задачи - получить статусы EOD и получить все промежуточные статусы (и выполнить объединение в конце). Я также думаю, что могу присоединить таблицы к календарной таблице и использовать функцию LAG, чтобы заставить ее продолжать статусы в течение нескольких дней.
Я имею в виду, что проще всего было бы перебирать дни, но я чувствую, что это будет легко для меня, но потребуется время для обработки. Текущая таблица, которая запускает этот процесс с 2015 года, содержит почти шесть миллионов записей, поэтому мне нужно, чтобы она работала как можно быстрее. В основном peoople будет запускать его для диапазона дат, но, по крайней мере, один раз в неделю я буду использовать его для 12-недельного диапазона (для еженедельных отчетов), а затем я буду делать для этого год или два года ежемесячно / ежеквартально. отчетности.
Есть предложения?