【发布时间】:2012-11-16 13:49:38
【问题描述】:
我有一个表,其中包含一系列基于时间的事件,每个事件都有一个开始和结束日期。对于最近(当前)事件,结束日期为 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;
谢谢。
【问题讨论】:
-
您有很多未接受答案的问题,如果您可以返回并标记答案正确,您将对您的问题更感兴趣(使用左侧的勾号轮廓)回答)。
-
我什至不知道接受功能。将返回并更新一些较旧的答案。