Oracle FIRST/LAST에서 KEEP에 대한 설명
질문.
KEEP가 정확히 무엇인지, 포함/포함하지 않을 경우의 효과에 대해 설명해 주십시오.
설명을 찾았지만 명확한 설명을 찾을 수 없었습니다.
"KEEP"의 실제 포인트/파워는 서로 다른 열을 집계하고 정렬할 때입니다.
안타깝게도 "keep" 조항을 검색하기 시작하면 Oracle 문서에서 아무것도 찾을 수 없습니다(그리고 바라건대 이 블로그 게시물 때문에 사람들이 이제 참조를 갖게 될 것입니다).물론 Oracle은 이러한 기능을 문서화합니다.SQL Language Reference에서 첫 번째 및 마지막으로 호출된다는 것만 알면 됩니다.
# However, you can do even better by just adding three "keep clause" functions to the original query:
SELECT
ra.relation_id,
MAX(ra.startdate) startdate,
MAX(ra.address) KEEP(DENSE_RANK LAST ORDER BY ra.startdate) address,
MAX(ra.postal_code) KEEP(DENSE_RANK LAST ORDER BY ra.startdate) postal_code,
MAX(ra.city) KEEP(DENSE_RANK LAST ORDER BY ra.startdate) city
FROM
relation_addresses ra
WHERE
ra.startdate <= to_date(:reference_date, 'yyyy-mm-dd')
GROUP BY
ra.relation_id
여기서 제 대답을 바꿔 말하면,
MAX(ra.address) KEEP(DENSE_RANK LAST ORDER BY ra.startdate)
문은 (대략) 오른쪽에서 왼쪽 순서로 고려할 수 있습니다.
ORDER BY ra.startdate
는 각 의 행을 즉, 각, 룹, 서, 음의 순서로 하는 것을 의미합니다.startdate
열ra
테이블(이시사용드implicit))ASC
순서 그 다음에 (으); ;▁ending면); )그)러KEEP (DENSE_RANK LAST
는 각 가 매겨진 행(열한 행에는 순위가 하는 것을 의미합니다.KEEP
LAST
즉(순, 있는행가최)이행)startdate
); 그리고 마지막으로MAX(ra.address)
각 그룹의 나머지 보관 행에 대해 최대 주소를 반환합니다.
최값을찾있다니습을 .address
out maximum ( 값을 합니다.startdate
그룹에 .
다음을 제외하고는KEEP
절:
MAX(ra.startdate)
평최최( 찾의 최대를 찾는 합니다.startdate
각 그룹에 대한 열입니다.
참고: 다음 표 이름 relation_addresses를 고려합니다.
relation_id startdate 주소 posta _code city
120-2-2019 2, PVR 파크 879776 탐바람
125-MAY-2020 789, CV 라만나가르 877 876 CV 라만나가르
218-JAN-2018 97, 파리 코너 699776 Ch main.
3 10-MAR-20212/ 2678, 파크 로드 879 776 뱅.
4 12-JUN-2019 89, 테크 파크 638776 테크 파크
503-SEP-2022 309, 파리 모퉁이 거리 673776 Ch main.
517-DEC-2020 77, PVR 하우스 690 960 TN.
ra.relation_id - 각 relation_id를 제공합니다.예를 들어 1
MAX(ra.start date) 시작 날짜 - 관계 ID 1(25-may-2020)에 대한 최대 시작 날짜를 제공합니다.
MAX(ra.address) KEEP(RA.startdate 기준 DENSE_RANK LAST ORDER) 주소 -
- 주문 기준 ra.startdate - start_date를 오름차순(20-Feb-2019, 25-may-2020)으로 주문합니다.
- DENSE_RANK LAST - 마지막 시작 날짜(최대 시작 날짜) – (25-5-2020)
- MAX(ra.address) KEEP(DENSE_RANK LAST ORDER by ra.start date) MAX(ra.address) KEEP(25-may-2020) – 각 시작일 주소 - 789, CV Ramannagar
MAX(ra.postal_code) KEEP(RA.startdate 기준 DENSE_RANK LAST ORDER) post_code -
- 주문 기준 ra.startdate - start_date를 오름차순(20-Feb-2019, 25-may-2020)으로 주문합니다.
- DENSE_RANK LAST - 마지막 시작 날짜(최대 시작 날짜) – (25-5-2020)
- MAX(ra.postal_code) KEEP(DENSE_RANK LAST ORDER by ra.start date) MAX(ra.address) KEEP(25-may-2020) – 각 시작일 주소 - 877876
MAX(ra.city) KEEP(ra.startdate 기준 DENSE_RANK LAST ORDER) 도시 -
- 주문 기준 ra.startdate - start_date를 오름차순(20-Feb-2019, 25-may-2020)으로 주문합니다.
- DENSE_RANK LAST - 마지막 시작 날짜(최대 시작 날짜) – (25-5-2020)
- MAX(ra.city) KEEP(DENSE_RANK LAST ORDER by ra.start date) MAX(ra.address) KEEP(25-may-2020) – 각 시작일 주소 - CV Ramannagar
GROUP BY ra.relation_id – 출력은 relation_id에 의한 그룹 기준으로 제공됩니다.
최종 출력은 다음과 같습니다.
relation_id startdate 주소 posta _code city
125-MAY-2020 789, CV 라만나가르 877 876 CV 라만나가르
218-JAN-2018 97, 파리 코너 699776 Ch main.
3 10-MAR-20212/ 2678, 파크 로드 879 776 뱅.
4 12-JUN-2019 89, 테크 파크 638776 테크 파크
517-DEC-2020 77, PVR 하우스 690 960 TN.
언급URL : https://stackoverflow.com/questions/65866812/explanation-of-keep-in-oracle-first-last
'programing' 카테고리의 다른 글
이미지를 NSUserDefaults에 저장하시겠습니까? (0) | 2023.08.04 |
---|---|
web.config의 단일 폴더에 대해 익명 인증을 허용하시겠습니까? (0) | 2023.08.04 |
주어진 HTML을 사용하여 동적으로 iframe 만들기 (0) | 2023.08.04 |
asp.net c# http에서 https로 리디렉션 (0) | 2023.08.04 |
Android 모양 색상을 프로그래밍 방식으로 설정 (0) | 2023.08.04 |