在mysql中使用select和sub select

e5nqia27  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(584)

我有一个关于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中插入的第一条消息。
如果有人能帮助我,我将不胜感激。谢谢你们!

vql8enpb

vql8enpb1#

这也许能帮你。。。我正在使用预查询的连接(pq别名)。这个查询只会转到您的消息并根据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

相关问题