2016-12-07 8 views
1

私は以下のスクリプトを使用して、ユーザーがログアウトセッションにログインするのを探します。 2か月後に誰がログインしていないかを表示するように変更できますか?SQL with最後にログオンした人について報告したい

select A.USERNAME, P.NAME, max(L.CREATED) as LAST_LOGIN 
from GIDB_G_LOGIN_SESSION_V L 
inner join GIDB_GC_AGENT A 
    on A.ID = L.AGENTID 
inner join GIDB_GC_PLACE P 
    on P.ID = L.PLACEID 
where not exists 
    (select X.AGENT_ID 
    from GIDB_G_LOGIN_SESSION_V X 
    where X.CREATED >= add_months(trunc(sysdate),-2) 
    and X.AGENTID = L.AGENTID) 
group by A.USERNAME, P.NAME 

SQL Serverの:

select A.USERNAME, P.NAME, max(L.CREATED) as LAST_LOGIN 
from GIDB_G_LOGIN_SESSION_V L 
inner join GIDB_GC_AGENT A 
    on A.ID = L.AGENTID 
inner join GIDB_GC_PLACE P 
    on P.ID = L.PLACEID 
left join GIDB_G_LOGIN_SESSION_V X 
    on X.AGENTID = L.AGENTID 
    and X.CREATED >= dateadd(mm,-2,getdate()) 
where X.AGENTID is null 
group by A.USERNAME, P.NAME 

のMySQL:私はちょうど

select 
    A.USERNAME, P.NAME, L.LOGINSESSIONID, L.AGENTID, L.LOGINID, L.STATE, 
    L.CREATED, L.TERMINATED, (L.TERMINATED_TS - L.CREATED_TS) AS Duration 
from 
    GIDB_G_LOGIN_SESSION_V L, 
    GIDB_GC_AGENT A, 
    GIDB_GC_PLACE P 
WHERE 
    (L.CREATED >= to_date ('20/09/2016' , 'DD/MM/YYYY')) 
    and 
    (L.CREATED < to_date ('22/09/2016' , 'DD/MM/YYYY')) 
    AND 
    (L.AGENTID = A.ID) 
    AND 
    (L.PLACEID = P.ID) 
    --AND A.USERNAME IN ('13866')` 
+0

mysqlまたはsqlサーバ – Sankar

+1

TO_DATEはOrです。 acle構文... OPは非常に混乱しています – JohnHC

+0

さらに、あなたの結合構文は約10年前に置き換えられました。 ** EXPLICIT JOINS ** – JohnHC

答えて

0

Oracleバージョン(既存のTO_DATEに基づいて()関数)、このいずれかを把握することはできません

select A.USERNAME, P.NAME, max(L.CREATED) as LAST_LOGIN 
from GIDB_G_LOGIN_SESSION_V L 
inner join GIDB_GC_AGENT A 
    on A.ID = L.AGENTID 
inner join GIDB_GC_PLACE P 
    on P.ID = L.PLACEID 
left join GIDB_G_LOGIN_SESSION_V X 
    on X.AGENTID = L.AGENTID 
    and X.CREATED >= date_add(curdate(), INTERVAL -2 MONTH) 
where X.AGENTID is null 
group by A.USERNAME, P.NAME 
+0

素晴らしい!本当にありがとうJohnHC、それは完璧に動作します:-)私は '存在しない場所' – Tambo

関連する問題