我有下表:
+--+-------------------+---------------------+-----------------------+ |ID| lt_user | lt_time_stamp | lt_activity_operation | +--+-------------------+---------------------+-----------------------+ |1 | External Sales | 2013-02-15 15:17:34 | login | |2 | External Sales | 2013-03-20 16:25:09 | login | |3 | Internal Sales | 2013-07-29 13:09:22 | login | |4 | Internal Sales | 2013-08-01 11:06:11 | login | |5 | Internal sales | 2013-08-02 10:06:59 | login | |6 | internal sales | 2013-08-02 10:21:38 | login | |7 | internal sales | 2013-08-07 16:13:01 | login | |8 | Internal Sales | 2013-08-12 10:51:16 | login | +--+-------------------+---------------------+-----------------------+
我正在尝试检索每个用户的最后一个实例(时间戳)。
我需要的是:
+--+-------------------+---------------------+-----------------------+ |ID| lt_user | lt_time_stamp | lt_activity_operation | +--+-------------------+---------------------+-----------------------+ |2 | External Sales | 2013-03-20 16:25:09 | login | |8 | Internal Sales | 2013-08-12 10:51:16 | login | +--+-------------------+---------------------+-----------------------+
我得到的是:
+--+-------------------+---------------------+-----------------------+ |ID| lt_user | lt_time_stamp | lt_activity_operation | +--+-------------------+---------------------+-----------------------+ |3 | Internal Sales | 2013-07-29 13:09:22 | login | |1 | External Sales | 2013-02-15 15:17:34 | login | +--+-------------------+---------------------+-----------------------+
我的查询是:
SELECT lt_user, lt_time_stamp, lt_activity_operation
FROM log_table
GROUP BY lt_user
ORDER BY lt_time_stamp DESC;
由于
答案 0 :(得分:1)
尝试使用MAX()
:
SELECT lt_user, MAX(lt_time_stamp), lt_activity_operation
FROM log_table GROUP BY lt_user, lt_activity_operation;
答案 1 :(得分:0)
限制版本:
SELECT lt_user, lt_time_stamp, lt_activity_operation
FROM log_table GROUP BY lt_user, lt_activity_operation
ORDER BY lt_time_stamp DESC LIMIT 1;
答案 2 :(得分:0)
获取最后一行的正确方法是进行聚合以获取max()
值,然后重新连接回原始数据:
select lt.*
from (SELECT lt_user, max(lt_time_stamp) as maxts
FROM log_table
GROUP BY lt_user
) ltsum join
log_table lt
on ltsum.lt_user = lt.user and ltsum.maxts = lt.lt_time_stamp;
在这种情况下,您只需要获取最后一个活动。你也可以用这个技巧来做到这一点:
SELECT lt_user, max(lt_time_stamp) as maxts,
substring_index(group_concat(lt_activity_operation order by lt_time_stamp desc), ',', 1
) as last_activity
FROM log_table
GROUP BY lt_user;
答案 3 :(得分:0)
像这样使用
SELECT lt_user, MAX(lt_time_stamp), lt_activity_operation
FROM log_table
GROUP BY lt_user, lt_activity_operation
ORDER BY lt_time_stamp DESC;
答案 4 :(得分:0)
使用GROUP BY
命令时,您需要告诉SQL应该显示所选记录中的哪一个,因为它会占用所有记录并将它们分组到每个分组记录的一个结果记录中。因此,您需要为其选择MAX()
或任何其他特定函数或参数(在您的情况下,时间戳)。
SELECT lt_user, MAX(lt_time_stamp), lt_activity_operation
FROM log_table
GROUP BY lt_user
ORDER BY lt_time_stamp DESC;
如果 lt_activity_operation
列完全相同(在数据库中登录),则不需要函数,但如果它出现,可能需要选择与lt_time_stamp相同的方式。