SQL - 返回每行的最新评论

时间:2016-06-12 11:19:03

标签: mysql

所以我有两个表,一个包含所有数据,另一个包含注释列表,我需要为数据表中的每一行加载最新注释。这是它的样子

表:queries

id    | name       |
--------------------
1     | John Doe   |
2     | Jane Doe   |
3     | Alex Smith |

表:messages

id    | queriesId  | comment     | dateAdded           |
--------------------------------------------------------
1     | 1          | Comment 1   | 2016-06-12 15:00:08 |
2     | 1          | Commetn 2   | 2016-06-12 15:01:08 |
3     | 2          | Comment 3   | 2016-06-12 15:05:35 |
4     | 2          | Comment 4   | 2016-06-12 15:06:35 |

我希望结果看起来像这样

id    | name       | comment     | dateAdded           |
--------------------------------------------------------
1     | John Doe   | Commetn 2   | 2016-06-12 15:01:08 |
2     | Jane Doe   | Comment 4   | 2016-06-12 15:06:35 |
3     | Alex Smith | Null        | Null                |

我试过这段代码

SELECT
  a.*,
  b.comment,
  b.LastComment
FROM
  queries a
LEFT JOIN
  (
  SELECT
    `comment`,
    MAX(dateAdded) LastComment,
      queriesid
  FROM
    messages
  GROUP BY
    queriesid
) b ON a.id = b.queriesid
GROUP BY
  a.id

但我得到的结果就是这个

id    | name       | comment     | dateAdded           |
--------------------------------------------------------
1     | John Doe   | Commetn 1   | 2016-06-12 15:01:08 |
2     | Jane Doe   | Comment 3   | 2016-06-12 15:06:35 |
3     | Alex Smith | Null        | Null                |

所以唯一的问题是comment是第一个条目,而不是与datetime列值对应的条目。我尝试了很多改动,但它似乎没有起作用。我确信这是一个微小的调整远离工作,但我似乎无法找到它。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

选择子查询中的最大日期和queryId,就像您一样。然后再次加入关于日期和id的消息以获得评论。

编辑:像这样

SELECT
  a.*,
  b.LastComment,
  comment.comment
FROM
  queries a
LEFT JOIN
  (
  SELECT
    MAX(messages.dateAdded) LastComment,
    messages.queriesid
  FROM
    messages
GROUP BY
    queriesid
) b ON a.id = b.queriesid
LEFT JOIN messages AS comment 
    ON comment.dateAdded = b.LastComment 
    AND comment.queriesid = b.queriesid
GROUP BY
  a.id