我有两个表,分别名为chatMaster和chatMessages,我试图离开这两个表,以获取每次聊天的主消息和最新消息的所有数据。我正在使用此查询来连接两个表
SELECT c.id, c.p1, c.p2, m.toP, m.message, m.createdOn FROM chatMaster c
left join chatMessages m on c.id = m.id group by m.id ;
此查询仅用于为chatMaster中的每个条目选择一行,但它为每个条目(例如,
)选择第一条消息1, 2018-11-24 00:40:08, HI!, 99e22056-ee7f-11e8-bc28-8acac6f59ef9, 1001
2, 2018-11-24 00:40:21, HI! There, 99e22056-ee7f-11e8-bc28-8acac6f59ef9, 1
3, 2018-11-24 01:33:12, HI!, e3345a17-ee7f-11e8-bc28-8acac6f59ef9, 2
这是select * from chatMessages
的结果,有两个聊天ID为99e22056-ee7f-11e8-bc28-8acac6f59ef9
的条目,我希望发送一个在2018-11-24 00:40:21
上发送的条目,但是我的加入查询的结果是< / p>
99e22056-ee7f-11e8-bc28-8acac6f59ef9, 1001, 1, 1001, HI!, 2018-11-24 00:40:08
e3345a17-ee7f-11e8-bc28-8acac6f59ef9, 2, 10001, 2, HI!, 2018-11-24 01:33:12
它正在选择第一条消息。如何选择最新消息?我应该进行哪些更改才能从chatMessages而不是第一条消息中获取最新消息。请询问您是否需要更多详细信息
答案 0 :(得分:2)
在Derived Table中,您可以为每个聊天主机createdOn
获得createdOn
(最新的id
)的最大值。然后,您可以将此结果集加入主表,以仅获取对应于最新createdOn
的行。
SELECT c.id, c.p1, c.p2, m.toP, m.message, m.createdOn
FROM chatMaster c
LEFT JOIN
( SELECT id, MAX(createdOn) AS latest_createdOn
FROM chatMessages
GROUP BY id
) AS dt
ON dt.id = c.id
LEFT JOIN chatMessages m
ON m.id = c.id AND
m.createdOn = dt.latest_createdOn