使用联合表时如何选择不同的行

kqlmhetl  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(327)

我有两个名为chatmaster和chatmessages的表,我试图左键联接这两个表,以便从master获取所有数据,并为每个聊天获取最新消息。我使用这个查询连接两个表

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 但是我的连接查询的结果是

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获取最新消息而不是第一条消息。请询问您是否需要更多详细信息

t5fffqht

t5fffqht1#

在派生表中,可以获得 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

相关问题