2010-11-17 51 views
0

我有一张表来存储客户端的登录历史记录。其中一个捕获的字段是时间戳。我正在尝试编写一个查询来获取用户的登录历史记录中除最后一行以外的所有内容。选择除最后一行以外的所有行

我觉得这样的事情应该工作:

SELECT * FROM LoginHistory L 
WHERE USER_ID like '[email protected]' 
HAVING L.TIMESTAMP < MAX(L.TIMESTAMP); 

这似乎只选择第一行。任何想法为什么会发生这种情况,以及如何正确执行它?

感谢

回答

0

试试这个:

SELECT * FROM LoginHistory L 
WHERE USER_ID = '[email protected]' 
AND L.TIMESTAMP < (SELECT MAX(TIMESTAMP) FROM LoginHistory WHERE USER_ID = '[email protected]'); 
+0

谢谢。虽然有没有一个原因MySQL不能做到这一点只有一个选择? – Chris 2010-11-17 12:25:02

0

我想你在找什么不等于MAX -

SELECT * FROM LoginHistory L 
WHERE USER_ID like '[email protected]' 
AND L.TIMESTAMP <> ( 
    select MAX(L.TIMESTAMP) fromLoginHistory 
    where USER_ID like '[email protected]' 
) 
+0

当你只是USER_ID组,你将只能得到1项纪录,这是MySQL怪癖之一... – wimvds 2010-11-17 10:09:45

+0

奇怪。我从来没有见过这样的团队。这是记录在任何地方?谢谢 – Chris 2010-11-17 12:23:45

+0

@Chris - GroupBy将返回一条记录,因为您的条件具有user_id,如''条件。无论如何,编辑我的查询删除groupby。 – 2010-11-17 12:41:58

相关问题