在MySQL中使用SELECT和SUB SELECT

在MySQL中使用SELECT和SUB SELECT,mysql,sql,Mysql,Sql,我有一个关于SQL的问题,我从来没有使用过select sub,最后我迷了路 Meu SQL: SELECT CLI.id, CLI.nome, CLI.senha, CLI.email, CLI.cpf, CLI.celular, CLI.data_nasc, CLI.genero, CLI.data_cadastro, CLI.status, CLI.id_socket, ATEN.mensagem, ARQ.nome AS foto, ATEN.data_mensagem FROM

我有一个关于SQL的问题,我从来没有使用过select sub,最后我迷了路

Meu SQL:

    SELECT CLI.id, CLI.nome, CLI.senha, CLI.email, CLI.cpf, CLI.celular, CLI.data_nasc, CLI.genero, CLI.data_cadastro, CLI.status, CLI.id_socket, ATEN.mensagem, ARQ.nome AS foto, ATEN.data_mensagem
FROM ut_clientes AS CLI
LEFT JOIN ut_arquivos AS ARQ ON (ARQ.id_tipo = CLI.id AND ARQ.tipo = "ut_clientes")
INNER JOIN ut_atendimentos AS ATEN ON (ATEN.id_usuario_envio = CLI.id)
WHERE ATEN.id_usuario_envio != 59163 
GROUP BY CLI.id 
ORDER BY ATEN.data_mensagem
DESC
嗯,我想做的是根据客户ID对消息进行分组,并根据数据管理只带来数据库中记录的最后一条消息

我尝试了很多方法,但最后显示的是插入DB中的第一条消息


如果有人能帮助我,我将不胜感激。谢谢你们

这可能会帮助你。。。我正在使用预查询的联接(PQ别名)。此查询只会转到您的消息并获取客户端ID和基于MAX()的最新ID。通过在此处执行group By,每个客户端最多返回1条记录。我还有WHERE子句来排除您列出的ID

根据该结果,您可以对查询的其余部分进行简单的连接

SELECT 
      CLI.id, 
      CLI.nome, 
      CLI.senha, 
      CLI.email, 
      CLI.cpf, 
      CLI.celular, 
      CLI.data_nasc, 
      CLI.genero, 
      CLI.data_cadastro, 
      CLI.status, 
      CLI.id_socket, 
      ATEN.mensagem, 
      ARQ.nome AS foto, 
      PQ.data_mensagem
   FROM 
      ut_clientes AS CLI
         LEFT JOIN ut_arquivos AS ARQ 
            ON CLI.id = ARQ.id_tipo 
            AND ARQ.tipo = "ut_clientes"
         INNER JOIN
         ( select 
                 ATEN.id_usuario_envio,
                 MAX( ATEN.data_mensagem ) as MostRecentMsg
              from 
                 ut_atendimentos AS ATEN
              where
                 ATEN.id_usuario_envio != 59163 
              group by
                  ATEN.id_usuario_envio ) PQ
           ON CLI.id = PQ.id_usuario_envio
   GROUP BY 
      CLI.id 
   ORDER BY 
      PQ.data_mensagem DESC

请用英语发帖,或将此发帖至。