2013-08-23 2 views
1

Возможно ли это в команде SQL.SQL get login and Logout timestamp

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

+0

Cant вы справиться с этим на фронте? – zxc

+0

Невозможно изменить данную таблицу. Используйте только формат SQL для форматирования результата – user2617053

ответ

0

Я предполагаю, что вы используете сервер MS SQL в случае MySQL удалить TOP 1 и добавить LIMIT 1 к концу подзапроса:

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

+0

Awesome! Спасибо @Valex – user2617053

Смежные вопросы