SQL获取登录和注销时间戳

时间:2013-08-23 08:06:35

标签: sql group-by

这在SQL命令中是否可行。

TABLE

ID|USERID|TIMESTAMP           |ACTION|
1 |USER1 |8/23/2013 3:25:10 PM|LOGOUT|
2 |USER1 |8/23/2013 3:15:10 PM|LOGIN |
3 |USER1 |8/23/2013 1:25:10 PM|LOGIN |
4 |USER2 |8/23/2013 9:25:10 AM|LOGOUT|
5 |USER2 |8/23/2013 8:25:10 AM|LOGIN |

结果:

USERID|TIMESTAMP LOGIN     |TIMESTAMP LOGOUT    
USER1 |8/23/2013 3:15:10 PM|8/23/2013 3:25:10 PM
USER1 |8/23/2013 1:25:10 PM|
USER2 |8/23/2013 8:25:10 AM|8/23/2013 9:25:10 AM

基本上我需要获取用户的登录日期和时间。有些情况下,由于用户单击x按钮而没有单击注销按钮,因此没有注销条目。

谢谢, RYL

1 个答案:

答案 0 :(得分:0)

我猜你在MySQL移除TOP 1并将LIMIT 1添加到子查询末尾时使用MS SQL服务器:

select ID,USERID,TIMESTAMP as LOGIN_TIME,
(SELECT TOP 1 
        CASE WHEN ACTION='LOGOUT' 
            THEN TIMESTAMP
            ELSE NULL
        END

        FROM T
        WHERE USERID=T1.USERID
              AND
              TIMESTAMP>T1.TIMESTAMP
        ORDER BY TIMESTAMP
) AS LOGOUT_TIME

from T AS T1
WHERE ACTION='LOGIN'
ORDER BY ID

SQLFiddle demo

相关问题