У меня есть две таблицы: одна содержит диапазоны дат (например, a и ValidToDate
) и один содержит события (то есть столбец EventDate
).Сплит диапазонов дат с использованием TSQL
Я ищу, чтобы написать сценарий, который разбивает каждый диапазон дат на несколько записей, если между ними происходит событие.
Например, рассмотрим следующее.
Диапазоны:
ValidFrom | ValidTo | RangeId
2010-01-01 | 2010-05-01 | 1
2010-05-01 | 2010-05-20 | 2
2010-05-20 | 2017-02-23 | 3
2017-02-23 | 2020-12-31 | 4
События:
EventDate | EventId
2010-03-15 | 101
2011-04-15 | 102
2015-05-15 | 103
В этом случае одно событие (101
) происходит в течение промежутка диапазона 1
, поэтому запись должна быть разделена на следующие. Это можно сделать, обновив исходную запись и вставив другую, или удалив оригинальную запись и вставив две новые.
ValidFrom | ValidTo | RangeId
2010-01-01 | 2010-03-15 | 1
2010-03-15 | 2010-05-01 | 5
Все решения я подготовил всегда была та же проблема: если два события происходят в течение 1 диапазона дат, сценарий не будет обрабатывать те правильно. Я мог бы решить эту проблему, написав ее на основе цикла for, который обрабатывает каждое событие только после предыдущее событие завершило обработку, но это приведет к очень низкой производительности.
Может ли кто-нибудь дать мне несколько указателей на то, как это сделать? Возможно, это распространенная проблема, которая имеет общепринятое решение?
должен результат сохранить оригинальный RangeIds или идентификаторами диапазон просто должен быть уникальным. Например, в вашем случае ваши 2 события имеют RangeIds 1 и 2, а все остальные - 3,4,5? – vitalygolub
Есть ли какие-либо жесткие ограничения на то, сколько событий может попасть в существующий диапазон? Это не более двух, или может быть неопределенное число? – AakashM
RangeIds не имеет значения, и нет жесткого предела количества событий. –