我在SQL中有一个代表某种事件的表。我尝试确定特定事件未被另一个特定事件“跟踪”的所有行。 在下表中,这将是有人注册但之后没有注销的所有行(Lucy和Joe)。这是用SQL实现的,如果可以的话?
|Id|Name |Event |
==========================
|01|Fred |Sign up |
-------------------------
|02|Joe |Sign up |
--------------------------
|03|Lucy |Sign up |
--------------------------
|04|Joe |Do foo |
--------------------------
|05|Joe |Sign out |
--------------------------
|06|Joe |Sign up |
--------------------------
|07|Fred |Sign out |
--------------------------
非常感谢
答案 0 :(得分:3)
SELECT x.*
FROM events x
LEFT
JOIN events y
ON y.name = x.name
AND y.id > x.id
AND y.event ='sign out'
WHERE x.event = 'sign up'
AND y.id IS NULL;
或类似的东西
答案 1 :(得分:1)
select * from
table as t1 left outer join table as t2
on(t1.name=t2.name and t2.event='sign out')
where
t1.event='sign up' and t2.name is null
除非你定义它所以你需要提供更多信息,否则没有“跟着”之类的东西。 (可能在ON子句中添加“t1.id> t2.id”)
答案 2 :(得分:1)
我想出的最近的事情是看谁有一个完整的“登录”“退出”对。
SELECT Id, Name
FROM
EVENTS
WHERE
event = 'Sign up' or event = 'Sign out'
group by
Name
having Mod(count(*), 2) <> 0