SQL 交易:签署 "in" 不匹配 "out"
SQL Transactions : Sign "in" without matching "out"
呸,复杂的问题要问数据库。
我在一天内为一系列用户进行了一系列登录和注销事件。
我想跟踪所有忘记退出的人:即给定日期的最后一笔交易是 "IN"。我想总结一下这些人是谁:
personid datetime activity
ABC1 2015-09-01 08:00:00 IN
DEF2 2015-09-01 09:00:00 IN
ABC1 2015-09-01 12:00:00 OUT
ABC1 2015-09-01 13:04:00 IN
GHI3 2015-09-01 08:30:00 IN
GHI3 2015-09-01 15:50:00 OUT
ABC1 2015-09-01 14:00:00 OUT
ABC1 2015-09-01 14:20:00 IN
GHI3 2015-09-03 16:01:00 IN
ABC1 2015-09-03 16:00:00 OUT
所以在这种情况下,我想要一个列表:
DEF2 didn't sign out
GHI3 didn't sign out second time
请注意,如图所示,一天中可能有多个 sign-in/sign-outs。
你可以 select 最后一个 activity (按日期),如果它是 IN 那么,在这之后就没有 OUT
SELECT * FROM (
SELECT personid,
max(datetime),
activity FROM table GROUP BY personid) t1
WHERE t1.activity = 'OUT'
呸,复杂的问题要问数据库。
我在一天内为一系列用户进行了一系列登录和注销事件。 我想跟踪所有忘记退出的人:即给定日期的最后一笔交易是 "IN"。我想总结一下这些人是谁:
personid datetime activity
ABC1 2015-09-01 08:00:00 IN
DEF2 2015-09-01 09:00:00 IN
ABC1 2015-09-01 12:00:00 OUT
ABC1 2015-09-01 13:04:00 IN
GHI3 2015-09-01 08:30:00 IN
GHI3 2015-09-01 15:50:00 OUT
ABC1 2015-09-01 14:00:00 OUT
ABC1 2015-09-01 14:20:00 IN
GHI3 2015-09-03 16:01:00 IN
ABC1 2015-09-03 16:00:00 OUT
所以在这种情况下,我想要一个列表:
DEF2 didn't sign out
GHI3 didn't sign out second time
请注意,如图所示,一天中可能有多个 sign-in/sign-outs。
你可以 select 最后一个 activity (按日期),如果它是 IN 那么,在这之后就没有 OUT
SELECT * FROM (
SELECT personid,
max(datetime),
activity FROM table GROUP BY personid) t1
WHERE t1.activity = 'OUT'