我有一张桌子,我在一台机器上管理用户登录。根据活动类型,我确定它是否是登录或注销。我被要求生成关于用户登录/注销的报告。它适用于所有班次,但不适用于午夜班次。需要查询咨询
样品表:
User_id Activity_code timestamp
1 login 2016-03-28 11:10:00
1 logout 2016-03-28 19:45:00
2 login 2017-02-15 23:00:00
2 logout 2017-02-16 07:00:00
如果我按时间戳,我得到的报告正确地为用户ID1,而不是用户2
desc pmevents_bkp
Name Null? Type
------------- ------- --------------
EVENTTYPE NOT NULL NUMBER(4)
USERID CHAR(32)
JOBNUMBER NUMBER(11)
TIMESTAMP NOT NULL DATE
SEQUENCENUMBER NUMBER(8)
SQL >select * from pmevents_bkp;
EVENTTYPE USERID JOBNUMBER TIMESTAMP SEQUENCENUMBER
---------- -------------------------------- ---------- --------- --------------
101 JBOND 007 12345 11-MAR-17 12345
101 JBOND 007 12345 12-MAR-17 12345
101 JBOND 008 3245 11-MAR-17 3245
100 JBOND 007 12345 11-MAR-17 3245
SQL >select to_char(timestamp, 'MM/DD/YYYY'),
2 userid,
3 MIN(timestamp) KEEP (DENSE_RANK FIRST ORDER BY eventtype) "Login",
4 MAX(timestamp) KEEP (DENSE_RANK LAST ORDER BY eventtype) "Logout"
5 FROM pmevents_bkp
6 where timestamp BETWEEN TO_DATE('01-mar-17','DD-MON-YY') AND TO_DATE('30-mar-17','DD-MON-YY')
7 and (eventtype = '100'
8 or eventtype = '101')
9 group by to_char(timestamp, 'MM/DD/YYYY'),userid;
TO_CHAR(TI USERID Login Logout
---------- -------------------------------- --------- ---------
03/11/2017 JBOND 007 11-MAR-17 11-MAR-17
03/11/2017 JBOND 008 11-MAR-17 11-MAR-17
03/12/2017 JBOND 007 12-MAR-17 12-MAR-17
什么是正确的结果?你试过什么查询?不要害羞。 –
您是否意味着您想按登录时间戳进行分组,并将登出时间戳与匹配的登录时间戳相关联,而不管第二天是否登出? – marcothesane
同一个user_id只能登录和登出一次吗?或每天一次?或每天几次? – marcothesane