programing

여러 기준과 특정 순서를 가진 특정 열에 의한 구별되는 행

newsource 2023. 6. 14. 21:54

여러 기준과 특정 순서를 가진 특정 열에 의한 구별되는 행

테이블이 하나 있습니다.

id(unique)  priority foreignId name
1           true     12        a
2           false    12        b
3           false    13        c
4           true     13        d
5           false    14        a
6           false    14        x

이제 특정 외래 ID(들)에 대한 고유한 행을 원합니다. 예를 들어,

나는 외국인 Id 12 & 14 "where 외국인 Id in (12, 14)"에 대한 모든 행을 원한다, 결과는 다음과 같아야 합니다.

id(unique)  priority foreignId name
1           true     12        a
5           false    14        a

여기서 논리는 우선순위가 맞는 항목을 원하는 것뿐입니다.우선 순위가 있는 항목이 없으면 ID가 가장 낮은 행만 선택해야 합니다.

외부 ID 13의 두 번째 예

id(unique)  priority foreignId name
4           true     13        d

CTE(으)ROW_NUMBER그리고 거짓 앞에 처음 나타나는 정렬, 당신은 원하는 답을 얻습니다.

WITH CTE AS
(SELECT 
`id`, `priority`, `foreignId`, `name`,
ROW_NUMBER() OVER (PARTITION BY `foreignId` ORDER BY `priority` DESC) row_num
FROM tabl1
WHERE `foreignId` IN (12,14))
SELECT `id`, `priority`, `foreignId`, `name` FROM CTE WHERE row_num = 1
ID | 우선 순위 | 외국인 ID | 이름-: | :------- | --------: | :---1 | 참 | 12 | a5 | 거짓 | 14 | a
WITH CTE AS
(SELECT 
`id`, `priority`, `foreignId`, `name`,
ROW_NUMBER() OVER (PARTITION BY `foreignId` ORDER BY `priority` DESC) row_num
FROM tabl1
WHERE `foreignId` IN (13))
SELECT `id`, `priority`, `foreignId`, `name` FROM CTE WHERE row_num = 1
ID | 우선 순위 | 외국인 ID | 이름-: | :------- | --------: | :---4 | 참 | 13 | d

db<>여기로 이동

언급URL : https://stackoverflow.com/questions/73214160/distinct-row-by-a-certain-column-with-multple-criterias-and-specific-order