Без использования MSSQL, DB2 или Oracle. Нет CTE. Нет предиката OVERLAP. Нет типа данных ИНТЕРВАЛ. Ситуация: на ремонтируемом автомобиле работы не могут начаться до тех пор, пока все детали, заказанные для работы, получены. Детали можно заказывать несколько раз до начала ремонта. Нам нужно извлечь время, в течение которого транспортное средство находилось в состоянии «удержания деталей»
. Итак, для транспортного средства, идентифицированного как id = 1 детали были заказаны (d1) и получены (d2) в 4 различных случаях
ID d1 d2
1 8/1 8/8
1 8/2 8/6
1 8/12 8/14
1 8/3 8/10
8/1 8/8
d1 d2
|-------------------------------|
8/2 8/6 8/12 8/14
d1 d2 d1 d2
|---------------| |----------|
8/3 8/10
d1 d2
|---------------------|
8/1 8/14
|---------------------------------------------------------| = 13 days
8/10 8/12
|--------------------------------------| + |----------| = parts hold = 11 days
Как видно из вышеизложенного, время ожидания начала работы (при условии, что 8/1 в качестве дата, с которой автомобиль был готов к работе) 13 дней. Фактическое время ожидания запчастей составило 11 дней, это число нам нужно извлечь из данных. Фактические данные datetime будут временными метками, из которых мы будем извлекать часы, мы использовали даты в этом примере данных для простоты представления. Мы изо всех сил пытаемся создать решение на основе набора (не psm, не udf, не курсора). TIA