我有一张这样的表:
id | action | user_id
1 'test' 'person1'
2 'entered' 'person2'
3 'KEYPHRASE1' 'person1'
4 'entered' 'person1'
我需要选择并返回“输入”操作的user_id。但是,我需要在这两个短语的最后一次出现之后抓住这个'输入'动作:'KEYPHRASE1','KEYPHRASE2', 'KEYPHRASE3','KEYPHRASE4','KEYPHRASE5'和'KEYPHRASE6'。如果在最后一次出现这些KEYPHRASE之后没有发生'enter'动作,则返回null。
(因此,在此示例中,查询应返回'person1'而不是'person2')
答案 0 :(得分:1)
这似乎是where
子句解决方案中的相关子查询:
select user_id
from t
where t.action = 'entered' and
exists (select 1
from t t2
where t2.id < t1.id and
t2.user_id = t1.user_id and
t2.action in ('KEYPHRASE1', 'KEYPHRASE2', 'KEYPHRASE3', 'KEYPHRASE4', 'KEYPHRASE5', 'KEYPHRASE6')
以上检查操作是否在最后一个之后。回答问题(在最后之后)可以通过汇总来完成:
select user_id
from t
group by user_id
having (max(case when t.action = 'Entered' then id end) >
max(case when t2.action in ('KEYPHRASE1', 'KEYPHRASE2', 'KEYPHRASE3', 'KEYPHRASE4', 'KEYPHRASE5', 'KEYPHRASE6') then id
end)
)
答案 1 :(得分:0)
您可以这样做:
select user_id
from MyTble
where action = 'entered'
and id > (select MAX(id) from MyTble where action like 'KEYPHRASE%')