2014-01-03 3 views
0

У меня есть таблица. С записямиРазделение связанных записей в той же таблице в sql

**UserLoginAuditID EmployeeID LoginAuditCodeID LoginDate** 
538544      1795 96     2013-12-19 12:26:21.187 
538512      1795 137     2013-12-19 11:02:20.527 
538458      1795 96     2013-12-19 09:34:50.703 
538249      1795 96     2013-12-18 13:34:41.923 
538177      1795 96     2013-12-18 10:32:22.087 
537944      1795 96     2013-12-17 13:08:47.860 
537889      1795 96     2013-12-17 10:39:07.610 
536560      1795 96     2013-12-11 14:29:54.703 
536485      1795 137     2013-12-11 11:21:12.737 
536401      1795 96     2013-12-11 08:34:46.183 
534430      1795 96     2013-12-05 11:11:39.013 
533942      1795 137     2013-12-04 12:18:03.497 

LoginAuditCodeID 96 означает, что Login и 137 означает выход из системы.

Мне нужен соответствующий отдельный список логинов и выходов. Проблема заключается в наличии нескольких логинов. Мы можем рассмотреть регистрационную запись, которая находится непосредственно перед выходом из системы, оставляя одиночные записи входа.

Пожалуйста, помогите мне.

Я хочу список соответствующих записей в журнале и выходах. Для примера. В мои данные, приведенные выше,

538512     1795 137     2013-12-19 11:02:20.527 
    538458     1795 96     2013-12-19 09:34:50.703 
    536485     1795 137     2013-12-11 11:21:12.737 
    536401     1795 96     2013-12-11 08:34:46.183 
+0

Когда вы говорите, «соответствующий» вы имеете в виду дату? как 2013-12-19? – Tosx

+0

Какие СУБД вы используете? – gvee

+0

@Tosx: соответствующие логин и логины. – ShashikantNidoni

ответ

1

Вы можете получить соответствующий логин/выходы из системы следующим образом:

select Login, Logout from 
(
    select UserLoginAuditID as Logout, 
    (select UserLoginAuditID from 

     (select UserLoginAuditID, row_number() over (order by L2.LoginDate desc) rn 
     from logtable L2 
     where LoginAuditCodeID = 96 
     and L2.LoginDate < L.LoginDate 
     and L2.EmployeeID = L.EmployeeID) Y where rn = 1 
    ) Login 

    from logtable L where LoginAuditCodeID = 137 
) X where not login is null 
+0

Спасибо За ваш ответ. Но его не работает Чтобы найти соответствующий логин и выход из системы, мы должны рассмотреть дату, о которой я думаю. Я не настолько силен в dnms. – ShashikantNidoni

+0

Отредактировано чтобы рассмотреть дату и для SQL Server, посмотрите, работает ли это лучше. –

+0

Работал очень хорошо. Спасибо, большое спасибо .. :) A Very Happy new year .. :) – ShashikantNidoni

0

Я думаю, что это даст вам то, что вы хотите (предполагая, что SQL Server в качестве СУБД):

; WITH actions AS (
    SELECT UserLoginAuditID 
     , EmployeeID 
     , LoginAuditCodeID 
     , LoginDate 
     , Row_Number() OVER (PARTITION BY EmployeeID ORDER BY LoginDate) As seq 
    FROM your_table 
    WHERE LoginAuditCodeID IN (96, 137) 
) 
SELECT logins.* 
FROM actions As logins 
INNER 
    JOIN actions As logouts 
    ON logouts.EmployeeID = logins.EmployeeID 
    AND logouts.seq + 1 = logins.seq 
    AND logins.LoginAuditCodeID = 96 
    AND logouts.LoginAuditCodeID = 137 

Позвольте мне знать, как вы получите на.

+0

Да, я использую SQL. Его не работает .. :( – ShashikantNidoni

+0

@ user2087180 SQL Server? – gvee

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