No utilizando MSSQL o DB2 u Oracle. No CTE. Sin predicado OVERLAP. Sin tipo de datos INTERVALO. La situación: en un vehículo por reparar, el trabajo no puede comenzar hasta que se hayan recibido todas las piezas pedidas para el trabajo. Las piezas se pueden pedir varias veces antes del comienzo de la reparación. Tenemos que extraer el tiempo durante el cual el vehículo estaba en "partes sostienen"SQL para encontrar el tiempo transcurrido desde múltiples intervalos solapados
Así que para un vehículo identificado como ID = 1 partes recibieron la orden (d1) y recibió (d2) en 4 ocasiones diferentes
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
como se ve desde arriba, el tiempo de espera para empezar a trabajar (suponiendo 8/1 como la fecha de la que estaba disponible para el trabajo del vehículo) fue de 13 días. El tiempo real dedicado a esperar piezas fue de 11 días, que es el número que necesitamos derivar de los datos. Los datos de fecha y hora reales serán las marcas de tiempo de la que extraerá horas, utilizamos las fechas en esta muestra de datos para simplificar la presentación. Estamos luchando por generar una solución basada en conjunto (no psm, no udf, no cursor). TIA
Creo que una combinación de la izquierda en una tabla de calendario auxiliar podría ayudar. –
posible duplicado de [¿Cuál es una buena manera de encontrar espacios en un conjunto de fechas?] (Http://stackoverflow.com/questions/4765495/what-is-a-good-way-to-find-gaps-in -a-set-of-dimespans) –
@Brian, esta pregunta es muy diferente. OP, ¿puede agregar una vista (s) para ayudar en la consulta? –