首页 > 解决方案 > 查询以获取按字段值分组的所有行以及另一个字段的条件

问题描述

我有以下查询:

SELECT 
a.id_posicion,
a.profesional, 
MAX( a.fecha_hora ) AS fechaPosicion, 
a.latitud, 
a.longitud, 
b.tipo_profesional, 
b.nombre, 
b.apellidos,
c.tipo_profesional as tipoProfesional,
b.profile_image,
b.tel as tel, 
e.especialidad as especialidad_profesional,
b.ciudad as ciudad, 
b.departamento as departamento,
b.id_firebase as id_firebase 

FROM tb_ultima_posicion_pro a 

INNER JOIN users b ON b.id = a.profesional 

INNER JOIN tb_profesionales c ON c.id_profesionales = b.tipo_profesional

INNER JOIN tb_especialidades_profesional d ON d.profesional = b.id 

INNER JOIN tb_especialidades e ON d.especialidad = e.id_especialidad  

GROUP BY a.profesional 

ORDER BY fechaPosicion DESC

我需要的是从表 tb_ultima_posicion_pro 中获取所有记录,按字段分组profesional,这意味着我只为每个专业人士获得一行(没关系),对于每个专业人士,我需要获得最新字段的 te 行fecha_hora,这是一个日期时间字段。

我从这个查询中得到的是每个专业(好的)的一行,但不是具有最新fecha_hora字段值的行。

标签: mysqlgreatest-n-per-group

解决方案


或者,您可以首先通过对表 tb_ultima_posicion_pro 进行分组来获取最大 fetch_hora,然后可以加入其他表 -

SELECT a.id_posicion
      ,a.profesional
      ,am.fecha_hora AS fechaPosicion
      ,a.latitud
      ,a.longitud
      ,b.tipo_profesional
      ,b.nombre
      ,b.apellidos
      ,c.tipo_profesional as tipoProfesional
      ,b.profile_image
      ,b.tel as tel
      ,e.especialidad as especialidad_profesional
      ,b.ciudad as ciudad
      ,b.departamento as departamento
      ,b.id_firebase as id_firebase 
FROM tb_ultima_posicion_pro a
INNER JOIN (SELECT profesional
                  ,MAX(fecha_hora) AS fecha_hora
            FROM tb_ultima_posicion_pro 
            GROUP BY profesional) am ON a.profesional = am.profesional
                                    AND a.fecha_hora = am.fecha_hora
INNER JOIN users b ON b.id = a.profesional 
INNER JOIN tb_profesionales c ON c.id_profesionales = b.tipo_profesional
INNER JOIN tb_especialidades_profesional d ON d.profesional = b.id 
INNER JOIN tb_especialidades e ON d.especialidad = e.id_especialidad
ORDER BY fechaPosicion DESC

推荐阅读