先来看一张表。这是双方聊天记录表,我现在想查出指定某个人的聊天好友列表,并且这个列表要以最后通信时间倒排序。(也就是在好友列表中,谁最后通信,谁最上面)。
第一时间我想到的查询句子是这样的:
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
。貌似这不影响。
可能我说的太复杂不好理解 ,我贴一个网上描述更简单更好理解 的:
我说的就是上图方法一。
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…