Tengo una tabla con columnas start_date y end_date. Lo que debemos hacer es seleccionar todo y agruparlos por conflictos de fechas para cada Object_ID.SQL Group By Date Conflicts
Un conflicto de fecha es cuando la fecha de inicio y/o finalización de una fila pasan por otras filas '. Por ejemplo, estos son algunos ejemplos de conflictos:
La fila 1 tiene fechas del 1 al 5, la fila 2 tiene fechas del 2 al 3.
La fila 1 tiene fechas del 2 al 5, la fila 2 tiene fechas del 1 al 3.
La fila 1 tiene fechas del 2 al 5, la fila 2 tiene fechas del 3 al 6.
La fila 1 tiene fechas del 2 al 5, la fila 2 tiene las fechas 1 ° a 7 °.
Así, por ejemplo, si tenemos algunos datos de la muestra (se supone que los números son sólo días del mes por simplicidad):
id | object_id | start_date | end_date
1 | 1 | 1 | 5
2 | 1 | 2 | 4
3 | 1 | 6 | 8
4 | 2 | 2 | 3
lo que esperaría a ver es la siguiente:
object_id | start_date | end_date | numconflicts
1 | <na> | <na> | 2
1 | 6 | 8 | 0 or null
2 | 2 | 3 | 0 or null
Y para un caso segunda prueba, he aquí algunos datos de muestra:
id | object_id | start_date | end_date
1 | 1 | 1 | 5
2 | 1 | 2 | 4
3 | 1 | 6 | 8
4 | 2 | 2 | 3
5 | 2 | 4 | 5
6 | 1 | 2 | 3
7 | 1 | 10 | 12
8 | 1 | 11 | 13
Y para el segundo caso de prueba, lo que esperaríamos ver como salida:
object_id | start_date | end_date | numconflicts
1 | <na> | <na> | 3
1 | 6 | 8 | 0 or null
2 | 2 | 3 | 0 or null
2 | 4 | 5 | 0 or null
1 | <na> | <na> | 2
Sí, voy a necesitar alguna forma de diferenciar la primera y la segunda agrupación (la primera y última filas) pero no se han dado cuenta de que todo fuera. El objetivo es ver esta lista y luego, cuando hace clic en un grupo de conflictos, puede ver todos los conflictos en ese grupo.
Mi primer pensamiento fue intentar una cláusula GROUP BY CASE ... pero me envolví con la cabeza alrededor de sí misma.
El lenguaje que estoy usando para llamar a mysql es php. Entonces, si alguien conoce una solución de php-loop en lugar de una gran consulta de mysql, soy todo oídos.
Gracias de antemano.
Editar: Se agregó en las claves primarias para proporcionar un poco menos de confusión.
Editar: Agregado en un caso de prueba 2 para proporcionar un razonamiento más.
no, object_id no se refiere a la id de la tabla, sólo se hace referencia a un objeto a una tabla diferente a un determinado código. Es decir, solo las filas con object_id's similares pueden tener la posibilidad de ser un conflicto. – Peanut
Solo un pensamiento: si tiene la intención de hacer clic y expandir las filas del conflicto, poner '' en lugar de las fechas reales no parece tener mucho sentido. Si yo fuera usted, posiblemente usaría 'MIN (fecha_inicial) AS fecha_inicio' y' MÁX (fecha_fecha) AS fecha_del fin' para las filas del conflicto. De esta forma, el usuario podrá ver inmediatamente a qué rango de fechas pertenece el grupo de conflicto, sin tener que hacer clic/expandirlo primero. –