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 を返します。

(したがって、この例では、クエリは「person2」ではなく「person1」を返す必要があります)

4

2 に答える 2

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)
       )
于 2012-12-12T14:56:14.203 に答える
0

次のようなことができます。

select user_id
from MyTble
where action = 'entered'
  and id > (select MAX(id) from MyTble where action like 'KEYPHRASE%')
于 2012-12-12T16:29:54.663 に答える