0
사용자의 첫 번째 이벤트를 결정하기 위해 이벤트 데이터베이스를 쿼리하고 첫 번째 이벤트 이후에 발생하는 다음 2 개의 이벤트를 쿼리하려고합니다.Redshift Postgres 윈도우 함수 - rank()
event_user event_time event_name
---------- ---------- ----------
some_id 1000 1st_event
some_id 1005 2nd_event
another_id 1003 1st_event
some_id 1010 3rd_event
another_id 1007 2nd_event
some_id 1015 4th_event
some_id 1100 5th_event
하는 나는 다음과 같은 경우 :
:SELECT event_user
, event_time
, rank() over (partition by event_user order by event_time asc) as rank
, event_name
, lead(event_name, 1) over (order by event_time) as event_2
, lead(event_name, 2) over (order by event_time) as event_3
FROM event_table
WHERE event_name = 'some_specific_event'
AND event_user = 'some_id'
내가 'SOME_ID'와 사용자에 대한 올바른 결과를 얻을 데이터베이스의 각 이벤트는 이름, 타임 스탬프 및 관련 사용자가
event_user event_name event_time rank event_2 event_3
---------- ---------- ---------- ---- ------- -------
some_id 1st_event 1000 1 2nd_event 3rd_event
some_id 2nd_event 1005 2 3rd_event 4th_event
some_id 3rd_event 1010 3 4th_event 5th_event
....
내 목표는 마다 사용자 순위 1 레코드 (처음 3 이벤트)를 얻을 수있는 하위 쿼리로 사용하는 것입니다
SELECT * FROM (above query) WHERE query.rank = 1
그러나 사용자를 지정하는 WHERE 절을 제거하면 결과가 잘못됩니다. "다음"이벤트가 올바르지 않습니다. 특정 사용자에 대한 쿼리를 실행하여 확인할 수 있습니다. rank() 함수가 event_times를 섞어 놓고있는 것처럼 느껴지 긴하지만 이것이 Window 함수에 대한 나의 첫 번째 경험이므로이를 수정하는 방법을 모르겠습니다.
제안 사항?
우리가 물어 봐도 될까요 당신이이 함수를하지 않는 MySQL의 태그 이유는 무엇입니까? –
제안되었습니다. –
몇 가지 샘플 입력을 보여줄 수 있습니다. –