mysql 将结果以列显示_mysql – 我需要连接三个表,将结果分组为一列,并显示另一列中的最高值...

说我有三张桌子:

>名称为ID的用户

>包含具有电子邮件地址的行的电子邮件

>包含行的消息,其中包含电子邮件的日期和标题

当然,第二个和第三个表都可以使用用户的ID与第一个表匹配.

我想要一个查询,它只返回每个用户一次,他们的电子邮件地址和他们最近的消息的日期.

如果我用这个:

SELECT name,email,title,date

FROM users

JOIN emails ON users.id = emails.user_id

JOIN messages ON messages.user_id = emails.user_id

group by name

order by date desc

我没有收到最新的消息,因为订单发生在加入和分组之后.我从用户那里收到一封电子邮件,电子邮件按日期排序.

这可以在一次加入中完成吗?我错过了什么?

您可以使用的虚拟数据库的Pastebin:http://pastebin.com/1x273aEe – 实际数据库不完全是这样,但它是同样的问题.

解决方法:

SELECT a.*, b.*, c.*

FROM users a

INNER JOIN emails b

ON a.ID = b.user_ID

INNER JOIN messages c

ON a.ID = c.user_ID

INNER JOIN

(

SELECT user_id, MAX(date) maxDate

FROM messages

GROUP BY user_ID

) d ON c.user_ID = d.user_ID AND

c.date = d.maxDate

标签:mysql,join,sql,greatest-n-per-group

来源: https://codeday.me/bug/20190629/1329695.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值