繁体   English   中英

SQL查询:使用SQL JOIN对最新消息进行分组

[英]SQL Query: Grouping the latest messages using SQL JOIN

我正在尝试使用SQL从不同的用户检索有关每个帖子的最新消息。 我有3张桌子:

  • 用户表(收集用户信息)
  • 发布表(收集发布信息)
  • 消息表(包含消息的表)

但是,我的SQL语法出错,这是代码

SELECT
   MAX(sequence) AS latestmsg,
   COUNT(*) AS msgcount,
   sequence,
   messageid,
   username,
   receipient,
   message,
   datestamp 
FROM
   messages 
   JOIN
      users 
      ON messages.username = users.username 
   JOIN
      posts 
      ON posts.postid = messages.messageid 
WHERE
   messages.receipient = 'try-2a' 
GROUP BY
   messages.messageid 
ORDER BY
   messages.sequence DESC

错误:字段列表中的列“用户名”不明确

使用架构链接到小提琴

SELECT
       MAX(sequence) AS latestmsg,
       COUNT(*) AS msgcount,
       sequence,
       messageid,
       users.username,
       receipient,
       message,
       datestamp 
    FROM
       messages 
       JOIN
          users 
          ON messages.username = users.username 
       JOIN
          posts 
          ON posts.postid = messages.messageid 
    WHERE
       messages.receipient = 'try-2a' 
    GROUP BY
       messages.messageid 
    ORDER BY
       messages.sequence DESC

请尝试以下修改后的查询:

SELECT sequence AS latestmsg,
    msgcount,
    sequence,
    messages.messageid,
    users.username,
    receipient,
    message,
    messages.datestamp 
FROM messages 
JOIN users ON messages.username = users.username 
JOIN posts ON posts.postid = messages.messageid 
JOIN (
    SELECT messageid, MAX(sequence) AS max_seq, COUNT(*) AS msgcount
    FROM messages
    GROUP BY messageid
) m ON m.messageid = messages.messageid AND m.max_seq = messages.sequence
WHERE messages.receipient = 'try-2a' 
ORDER BY messages.sequence DESC

SELECT列表中的username列需要在表别名前面加上前缀,因为在messagesusers中都存在username

SELECT
   MAX(sequence) AS latestmsg,
   COUNT(*) AS msgcount,
   sequence, 
   messageid,
   username, --This column needs to have the alias prefix
   receipient,
   message,
   datestamp 

如果要查找每个用户的最新消息,则需要按用户分组,然后在每个用户组中找到每个消息的最大时间戳。 您可以使用它来选择与该时间戳匹配的消息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM