programing

우선 순위에 따라 status_id인 각 직원에 대해 단일 행 선택

closeapi 2023. 6. 10. 09:06
반응형

우선 순위에 따라 status_id인 각 직원에 대해 단일 행 선택

직원별로 레코드를 하나씩만 추출하면 됩니다.employee_id에서.employee_leaves테이블에 있는 경우에만status_id는 다음 숫자 중 하나와 같습니다.7, 4, 3(우선 순위로 작성).로 행할 때status_id=7찾을 수 없습니다. 다음 행을 찾아야 합니다.status_id=4찾을 수 없는 경우 다음 행을 찾아야 합니다.status_id=3.

예: ID가 =4인 행을 반환해야 합니다.

이드 employee_id status_id
1 7 1
2 7 2
3 7 4
4 7 7
9 7 3
27 7 7

먼저 각 행을 필터링합니다.employee_id를 위해status_id당신이 원하는 것.
그런 다음 행의 순위를 지정합니다.ROW_NUMBER()원하는 우선순위를 적용하여 창 기능을 수행할 수 있습니다.
마지막으로 각 순위에서 첫 번째 행을 선택합니다.

WITH cte AS (
  SELECT *,
         ROW_NUMBER() OVER (
           PARTITION BY employee_id
           ORDER BY status_id = 7 DESC,
                    status_id = 4 DESC,
                    status_id = 3 DESC, -- this is the last option and it is actually not needed
                    id
         ) AS rn 
  FROM employee_leaves 
  WHERE status_id IN (7, 4, 3)
)
SELECT id, employee_id, status_id 
FROM cte 
WHERE rn = 1;

ORDER BY안절ROW_NUMBER()함수를 사용하여 단순화할 수 있습니다.

ORDER BY FIELD(status_id, 7, 4, 3),
         id

또는 다음 함수:

ORDER BY FIND_IN_SET(status_id, '7,4,3'),
         id

데모를 참조하십시오.

언급URL : https://stackoverflow.com/questions/75868099/selecting-single-row-for-each-employee-with-status-id-by-priroity

반응형