PostgreSQL의 조건부 선도/지연 함수
그룹 B에 속한 사용자가 수행한 다음 활동을 식별하려고 합니다. 그룹 A의 활동을 완료했습니다. 기본적으로 각 활동에 대해 그룹 B의 첫 번째 후속 활동을 찾아야 합니다. user.
한 가지 접근 방식은 조건부 창 기능을 활용하는 것입니다. 그러나 PostgreSQL에서 FILTER 절은 창 함수 내의 집계 함수에만 적용할 수 있으며, Lead() 또는 lag()와 같은 핵심 창 함수에는 적용할 수 없습니다.
따라서 실행 가능한 솔루션은 DISTINCT ON 구문을 사용하는 것입니다. CASE 및 창 함수와 함께:
SELECT name , CASE WHEN a2 LIKE 'B%' THEN a1 ELSE a2 END AS activity , CASE WHEN a2 LIKE 'B%' THEN a2 END AS next_activity FROM ( SELECT DISTINCT ON (name) name , lead(activity) OVER (PARTITION BY name ORDER BY time DESC) AS a1 , activity AS a2 FROM t WHERE (activity LIKE 'A%' OR activity LIKE 'B%') ORDER BY name, time DESC ) sub;
이 쿼리는 하위 쿼리를 사용합니다. 대상:
또는 사용자당 행 수가 제한된 소규모 데이터 세트의 경우 다음 쿼리를 사용할 수 있습니다.
SELECT name , activity AS a1 , lead(activity) OVER (PARTITION BY name ORDER BY time DESC) AS next_activity FROM t WHERE (activity LIKE 'A%' OR activity LIKE 'B%') ORDER BY name, time DESC;
이 쿼리는 다음을 직접 검색하여 논리를 단순화합니다. 소속 그룹에 관계없이 그룹 A 활동 및 후속 활동을 검색합니다.
위 내용은 PostgreSQL에서 그룹 A 활동에 이어 그룹 B의 다음 활동을 찾는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!