2012-12-12 24 views
0

我有一個表是這樣的:搜索價值列和行迴歸後語找到

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中的任何一個發生後沒有發生'進入'動作,則返回null。

(因此,在該示例中,查詢應返回「PERSON1」而不是「PERSON2」)

回答

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) 
     ) 
+0

我想你可以省略'那裏t2.id shahkalpesh

+0

謝謝,經過一點點琢磨,工作很棒 –

0

你可以做這樣的事情:

select user_id 
from MyTble 
where action = 'entered' 
    and id > (select MAX(id) from MyTble where action like 'KEYPHRASE%')