Sql内连接或自连接

ARU*_*RUN 3 sql-server join

我有一个从程序填充的SQL表,数据看起来像这样:

主键 - 请求ID列

Request ID  Session ID UserID LoginOperation     Time

1               1      Arun       Logon          8:00
2               1      Arun       Logoff         8:30
3               2      Sandy      Logon          7:55
4               2      Sandy      Logon Expired  8:38
Run Code Online (Sandbox Code Playgroud)

现在我需要的是

Request ID  Session ID UserID  LoginOperation    Time      Login Operation  Time

1              1       Arun    Logon             8:00      Logoff           8:30
3              2       Sandy   Logon             7:55      LogonExpired     8:38
Run Code Online (Sandbox Code Playgroud)

所以我需要我的登录信息以及同一行中的时间日志.

我怎样才能做到这一点?

我应该使用登录过滤我的第一个表,然后通过logoff或logonexpired对第二个表执行相同的操作,然后在会话ID上对这两个表进行内部联接.?

或者我可以在这些表格中自我加入某些条件.

请告诉我你的建议?

嗨,

我已经提出了以下查询来获取我的登录信息以及注销时间.

Select T.COGIPF_LOCALTIMESTAMP, T.COGIPF_SESSIONID, T.COGIPF_REQUESTID,
       T.COGIPF_STATUS, T.COGIPF_LOGON_OPERATION, T.COGIPF_USERNAME,
       T.COGIPF_USERID, T.COGIPF_NAMESPACE, T.COGIPF_CAMID,
       Z.COGIPF_LOCALTIMESTAMP as LogOffTime 
from [CognosAuditSampleDev].COGIPF_USERLOGON T 
    LEFT JOIN [CognosAuditSampleDev].COGIPF_USERLOGON Z on
        T.COGIPF_SESSIONID = Z.COGIPF_SESSIONID and
        Z.COGIPF_LOGON_OPERATION <>'Logon' 
where T.COGIPFSTATUS='Success' And Z.COGIPFSTATUS ='Success' And
      T.COGIPF_LOGON_OPERATION='Logon'
Run Code Online (Sandbox Code Playgroud)

我发现登录时没有收到logg的问题,在这种情况下,即使我执行左连接,我的表中也缺少登录记录.请让我知道我哪里出错了.

谢谢,Manikandan

Joe*_*orn 7

SELECT r1.RequestID, r1.SessionID, r1.UserId, r1.LoginOperation, r1.Time
    , r2.LoginOperation, r2.Time 
FROM Requests r1
INNER JOIN Requests r2 on r2.SessionID = r1.SessionID and r2.LoginOperation <> 'Logon'
WHERE r1.LoginOperation = 'Logon'
Run Code Online (Sandbox Code Playgroud)

你已经提到了问题中的自我加入...你应该试试:)