В SQL Server у меня есть список простоя. В нем перечислены начальное и конечное значение каждого простоя. Я хочу получить последнюю дату, но каждый день смешивается.SQL Server: Как вы можете превратить серию последовательных начальных и конечных дат в единый начальный диапазон?
Пример:
Мы предполагаем, что каждый простои в тот же день.
A) begin 09:00 End 11:00
B) begin 10:00 End 12:00
C) begin 12:00 End 13:00
D) begin 15:00 End 16:00
Тестовый пример:
1)
At - 11:00
Results: Begin A (9:00), End C (13:00)
2)
At - 11:30
Results: Begin B (10:00), End C (13:00)
3)
At - 12:00
Results: Begin B (10:00), End C (13:00)
4)
At - 12:30
Results: Begin C (10:00), End C (13:00)
Если мы только посмотрим на значение "End". Его всегда последняя дата, каждая дата смешивалась. его, как и все простоя в одной временной шкале. вы ставите и проверяете, когда закончится простоя. Независимо от того, является ли это простоем A или B или C ....
Примечание: только SQL-запрос, без функции. Я предпочитаю без рекурсивного, но.
От Mack Ответ:
DECLARE @Downtime AS TABLE(beginDT datetime, endDT datetime)
INSERT INTO @Downtime VALUES('09:00','11:00')
INSERT INTO @Downtime VALUES('10:00','12:00')
INSERT INTO @Downtime VALUES('12:00','13:00')
INSERT INTO @Downtime VALUES('15:00','16:00')
Я думаю, что нужно рекурсивным. search @DateNow должно быть между beginDT и endDT. и нам нужно проверить рекурсивно, если у endDT каждого из них было другое время простоя.
В моем примере A-B-C являются последовательными (или в то же время). поэтому, если CURRENTTIME между попрошайничеством А и концом С, времени реального Конца есть конец простоя дерева (13:00)
9 10 11 12 13 14 15 16
|----A----|
|----B----|
|---C---|
|---D---|
|---- A and B and C ---|
Привет при х, Вам действительно нужно включать структуры таблицы для нас, чтобы быть в состоянии помочь правильно. Ваш текущий запрос тоже поможет. – Mack