MYSQL:奇怪的结果是一个简单的GROUP BY ORDER BY语句(显示错误的列数据)

时间:2014-08-29 12:39:13

标签: mysql group-by greatest-n-per-group

所以我有一个用于每个会话的带有stamp_in和stamp_out(纪元)的用户会话的表

TABLE:    tk_sessions 
columns:  ses_id | ass_id | stamp_in | stamp_out

(ass_id代表资产ID hehe)

我基本上只想检索每个资产的最新会话......

所以我试过这个:

SELECT ses_id,ass_id,stamp_in,stamp_out 
    FROM tk_sessions 
    ORDER BY stamp_in DESC

以预期的降序返回所有会话 我只想返回每个ass_id中的1个,所以我添加了GROUP BY ass_id语句

SELECT ses_id,ass_id,stamp_in,stamp_out 
    FROM tk_sessions GROUP BY ass_id 
    ORDER BY stamp_in DESC

但结果很奇怪...... 这似乎按预期为每个ass_id返回1行,但返回错误的会话(不是最新的stamp_in会话)

是什么给出的?

划伤头

1 个答案:

答案 0 :(得分:1)

如果没有聚合函数的分组将导致您的查询的不确定顺序,您可以通过计算stamp_in的最大值并使用您的表连接来使用自联接,以便返回具有最高stamp_in值的行对于您的每个资产ID

SELECT s.*
 FROM tk_sessions s
JOIN (SELECT MAX(stamp_in) stamp_in ,ass_id FROM tk_sessions  GROUP BY ass_id ) t
ON(s.stamp_in = t.stamp_in AND s.ass_id = t.ass_id)
 ORDER BY s.stamp_in DESC

Reference :The Rows Holding the Group-wise Maximum of a Certain Column