Ver Mensaje Individual
  #5 (permalink)  
Antiguo 13/02/2009, 09:04
jurena
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Consulta correlacionada?

Probablemente sanchy tenga razón y con programación también podrías hacerlo, pero estamos en un foro de base de datos y te daré una respuesta de base de datos, en una consulta, aunque he de añadir que no sé si será más eficiente que hacer un par de consultas y utilizar algo de programación:
Código sql:
Ver original
  1. SELECT a.nombre, a.apellidos, ac.id, ac.actividad, ac.fecha_inicio, ac.fecha_fin
  2. FROM alumnos a
  3. INNER JOIN (
  4.  
  5. SELECT aa.alumno_id ID, t1.id1 ID1, t1.id2 ID2
  6. FROM actividades_alumnos aa
  7. INNER JOIN (
  8.  
  9. SELECT a.id id1, b.id id2
  10. FROM actividades a
  11. INNER JOIN actividades b
  12. WHERE (
  13. a.id <> b.id
  14. )
  15. AND (
  16. (
  17. b.fecha_inicio >= a.fecha_inicio
  18. AND b.fecha_inicio <= a.fecha_fin
  19. )
  20. OR (
  21. b.fecha_inicio <= a.fecha_inicio
  22. AND b.fecha_fin > a.fecha_inicio
  23. )
  24. )
  25. )t1 ON aa.actividad_id = t1.id1
  26. OR aa.actividad_id = t1.id2
  27. GROUP BY aa.alumno_id
  28. HAVING COUNT( * ) >2
  29. )t2 ON a.id = t2.ID
  30. INNER JOIN actividades ac ON ac.id = t2.ID1
  31. OR ac.id = t2.ID2
  32. ORDER BY a.id, ac.fecha_inicio, ac.fecha_fin

Última edición por jurena; 13/02/2009 a las 09:23