如何在此查询中获取每位技术人员的最后完成服务?

时间:2014-07-04 18:15:42

标签: mysql sql greatest-n-per-group

我有这种关系

enter image description here

我很高兴得到每个技术人员的最后完成Servicio.FechaTermino服务Servicio Tecnico)。

使用此查询:

SELECT FechaTermino as FechaTermino, idTecnico, Latitud, Longitud, Nombre, Apellido, Flag, idServicio
FROM Servicio, Tecnico, Servicio_Tecnico
WHERE Servicio.idServicio = Servicio_Tecnico.Servicio_idServicio
AND Tecnico.idTecnico = Servicio_Tecnico.Tecnico_idTecnico
AND Completado = 1

我明白了:

enter image description here

观看idServico = 52

当我使用Max函数尝试获取每位技术人员的最后完成服务时,

SELECT Max(FechaTermino) as FechaTermino, idTecnico, Latitud, Longitud, Nombre, Apellido, Flag, idServicio
FROM Servicio, Tecnico, Servicio_Tecnico
WHERE Servicio.idServicio = Servicio_Tecnico.Servicio_idServicio
AND Tecnico.idTecnico = Servicio_Tecnico.Tecnico_idTecnico
AND Completado = 1
Group by idTecnico

这种情况发生了

enter image description here

idServicio=52消息,它考虑idServicio = 8就像上次完成的服务一样

如何获得每位技术人员的最后完成服务?

1 个答案:

答案 0 :(得分:1)

SELECT UNO.* FROM 
   (SELECT FechaTermino AS FechaTermino, idTecnico, Latitud, Longitud, Nombre, Apellido, Flag, idServicio
   FROM Servicio, Tecnico, Servicio_Tecnico
   WHERE Servicio.idServicio = Servicio_Tecnico.Servicio_idServicio
   AND Tecnico.idTecnico = Servicio_Tecnico.Tecnico_idTecnico
   AND Completado = 1) AS UNO

LEFT OUTER JOIN 

   (SELECT FechaTermino AS FechaTermino, idTecnico, Latitud, Longitud, Nombre, Apellido, Flag, idServicio
   FROM Servicio, Tecnico, Servicio_Tecnico
   WHERE Servicio.idServicio = Servicio_Tecnico.Servicio_idServicio
   AND Tecnico.idTecnico = Servicio_Tecnico.Tecnico_idTecnico
   AND Completado = 1) AS DOS

ON (UNO.idTecnico = DOS.idTecnico AND UNO.FechaTermino < DOS.FechaTermino)
WHERE DOS.idTecnico IS NULL;