@ Пользователь я обновил ответ. Несколько огромных упрощений.

пользуется 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 дней, и это число, которое нам нужно извлечь из данных. Фактические данные даты и времени будут метками времени, из которых мы будем извлекать часы, мы использовали даты в данных этого примера для простоты представления. Мы пытаемся сгенерировать решение, основанное на множестве (не psm, не udf, не курсор). ТИА

Ответы на вопрос(1)

Ваш ответ на вопрос