Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
600 views
in Technique[技术] by (71.8m points)

mysql分组后查某个字段最大,最新的记录为何下面这种查法有时会错误?

image.png

先来看一张表。这是双方聊天记录表,我现在想查出指定某个人的聊天好友列表,并且这个列表要以最后通信时间倒排序。(也就是在好友列表中,谁最后通信,谁最上面)。
第一时间我想到的查询句子是这样的:
select a.msg_id,a.from,a.to,a.date_time,a.cs_type from (select msg_id,from,to,date_time,cs_type from suc_db_msg where to= 1000332597 order by date_time desc) as a group by a.from order by a.date desc ;
子查询是先将发送消息给1000332597这个用户的记录查出来并且倒排,作为子表,然后外层对from(发送方)分组 ,结果自然会就是所有发送方的发送时间最大的一条记录留下。 但是事实是不是这样的,查到的结果与预期不一样。但是问题来了,同样写法,在不同的mysql服务器上,结果不一样,有些能符合预期,有些不能。为啥?
于是我看了一下版本和运行模式:
出现与预期不符的版本是 5.7 ,运行模式只有 STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION。貌似这不影响。

可能我说的太复杂不好理解 ,我贴一个网上描述更简单更好理解 的:
image.png
我说的就是上图方法一。


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

哈哈,每次都是刚发贴不久。就自己找到解决办法了。但是我先不贴上来,看看有没有大神先来给个答案。


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...