반응형
Oracle SQL - NULL 값이 있는 max()
시작 날짜와 종료 날짜가 각각 바인딩된 일련의 시간 기반 이벤트가 있는 테이블이 있습니다.가장 최근(현재) 이벤트의 경우 종료 날짜가 NULL입니다.중복 행을 축소하고 가장 빠른 시작 날짜와 가장 최근의 종료 날짜만 표시하려고 합니다.NULL이 날짜 필드에 있으면 해당 행은 무시됩니다.NVL()로 종료 날짜 값을 더미로 만들 수 있지만, 그러면 프런트 엔드 로직이 해당 값을 검색하고 대체합니다.
NULL을 높게 정렬하기 위해 max() 함수를 얻는 방법이 있습니까?
CREATE TABLE CONG_MEMBER_TERM
(
CONG_MEMBER_TERM_ID NUMBER(10) NOT NULL,
CHAMBER_CD VARCHAR2(30 BYTE) NOT NULL,
CONG_MEMBER_ID NUMBER(10) NOT NULL,
STATE_CD CHAR(2 BYTE) NOT NULL,
DISTRICT NUMBER(10),
START_DT TIMESTAMP(6) WITH TIME ZONE,
END_DT TIMESTAMP(6) WITH TIME ZONE
)
이 쿼리는 작동하지만 종료 날짜가 NULL인 행은 삭제합니다.
select CONG_MEMBER_ID,
district,
min(start_dt),
max(end_dt)
from CONG_MEMBER_TERM
where CONG_MEMBER_ID = 1716
group by CONG_MEMBER_ID, district;
이 쿼리를 사용하면 문제가 해결되지만 이제 "dummy" 종료 날짜 값(9999년 9월 9일)이 있습니다.코드를 사용하지 않아도 될 것 같습니다.
select CONG_MEMBER_ID,
district,
min(start_dt),
max(nvl(end_dt, to_date('9/9/9999', 'mm/dd/yyyy')))
from CONG_MEMBER_TERM
where CONG_MEMBER_ID = 1716
group by CONG_MEMBER_ID, district;
감사해요.
max(end_dt) keep (dense_rank first order by end_dt desc nulls first)
업데이트:
Oracle 11g R2 스키마 설정:
CREATE TABLE t
(val int, s date, e date)
;
INSERT ALL
INTO t (val, s, e)
VALUES (1, sysdate-3, sysdate-2)
INTO t (val, s, e)
VALUES (1, sysdate-2, sysdate-1)
INTO t (val, s, e)
VALUES (1, sysdate-1, null)
INTO t (val, s, e)
VALUES (2, sysdate-1, sysdate-.5)
INTO t (val, s, e)
VALUES (2, sysdate-.5, sysdate-.25)
SELECT * FROM dual
;
쿼리 1:
select val, min(s), max(e) keep (dense_rank first order by e desc nulls first)
from t group by val
결과:
| VAL | MIN(S) | MAX(E)KEEP(DENSE_RANKFIRSTORDERBYEDESCNULLSFIRST) |
---------------------------------------------------------------------------------------------
| 1 | November, 13 2012 14:15:46+0000 | (null) |
| 2 | November, 15 2012 14:15:46+0000 | November, 16 2012 08:15:46+0000 |
select CONG_MEMBER_ID
, district
, min(start_dt)
, NULLIF(MAX(NVL(end_dt
,TO_DATE('9999-09-09','YYYY-MM-DD')
)
)
,TO_DATE('9999-09-09','YYYY-MM-DD')
)
from CONG_MEMBER_TERM
where CONG_MEMBER_ID = 1716
group by CONG_MEMBER_ID
, district
;
언급URL : https://stackoverflow.com/questions/13417928/oracle-sql-max-with-null-values
반응형
'programing' 카테고리의 다른 글
각도 라이브러리 모듈이 추상 클래스를 사용하여 서비스 주입 (0) | 2023.06.17 |
---|---|
로컬 보석을 설치하려면 어떻게 해야 합니까? (0) | 2023.06.17 |
SQL: 사용 가능한 모든 테이블에서 모든 데이터 삭제 (0) | 2023.06.17 |
동시 가방 대 목록 (0) | 2023.06.17 |
목록 모음에서 메서드 선택 (0) | 2023.06.17 |