所以我有一个用于每个会话的带有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会话)
是什么给出的?
划伤头
答案 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