我有一个表,其中包含一系列基于时间的事件,每个事件都有一个开始和结束日期。对于最近(当前)事件,结束日期为 NULL。我试图折叠重复的行,只显示最早的开始日期和最晚的结束日期。由于 NULL 在日期字段中,该行将被忽略。我可以使用 NVL() 模拟结束日期值,但这会导致前端逻辑搜索并替换该值。
反正有没有让 max() 函数将 NULL 排序为高?
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;
这个查询解决了这个问题,但现在我有一个“虚拟”结束日期值(9/9/9999)。我宁愿不必编写代码。
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;
谢谢。