1

这在 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 按钮而不是单击注销按钮,因此没有注销条目。

谢谢,里尔

4

1 回答 1

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 演示

于 2013-08-23T08:19:00.260 回答