반응형
조건이 충족되면 A행 선택, 그렇지 않으면 각 그룹에 대해 B행 선택
2개의 테이블과 예약, 서류가 있습니다.
예약
booking_id | name
100 | "Val1"
101 | "Val5"
102 | "Val6"
문서
doc_id | booking_id | doc_type_id
6 | 100 | 1
7 | 100 | 2
8 | 101 | 1
9 | 101 | 2
10 | 101 | 2
다음과 같은 결과가 필요합니다.
booking_id | doc_id
100 | 7
101 | 10
기본적으로 문서 예약의 최신 기록을 가져오려고 하지만 doc_type_id 2가 있는 경우 doc_type_id 2의 최신 기록을 선택하거나 doc_type_id 1의 최신 기록을 선택합니다.
매우 큰 쿼리에 이를 적용해야 하는데 성능 친화적인 쿼리로 이를 달성할 수 있습니까?
로 할 수 있습니다.FIRST_VALUE()
각 행을 적절하게 정렬하여 창 기능booking_id
와의 관계를 유지하기 위해doc_type_id = 2
먼저 반환됩니다.
SELECT DISTINCT booking_id,
FIRST_VALUE(doc_id) OVER (PARTITION BY booking_id ORDER BY doc_type_id = 2 DESC, doc_id DESC) rn
FROM docs;
전체 행을 반환하려면 다음을 사용할 수 있습니다.ROW_NUMBER()
창 기능:
SELECT booking_id, doc_id, doc_type_id
FROM (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY booking_id ORDER BY doc_type_id = 2 DESC, doc_id DESC) rn
FROM docs
) t
WHERE rn = 1;
언급URL : https://stackoverflow.com/questions/69544869/select-row-a-if-a-condition-satisfies-else-select-row-b-for-each-group
반응형
'programing' 카테고리의 다른 글
npm WARN npm npm은 Node.js v9.1.0을 지원하지 않습니다. (0) | 2023.08.19 |
---|---|
공식을 끌어다 놓고 열 대신 행 참조를 변경 (0) | 2023.08.19 |
추상 클래스 및 하위에 생성자 주입 (0) | 2023.08.19 |
Grails Resources Plugin 및 AJAX가 javascript를 로드했습니다. (0) | 2023.08.19 |
리프빈에 메소드를 호출한 결과를 봄부터 주입하는 것이 가능합니까? (0) | 2023.08.19 |