找到短语后在列和返回行中搜索值

时间:2012-12-12 14:50:50

标签: sql sql-server-2008

我有一张这样的表:

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')

2 个答案:

答案 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%')