加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

具有NULL值的Oracle SQL – max()

发布时间:2020-12-12 13:53:07 所属栏目:百科 来源:网络整理
导读:我有一个表,它有一系列基于时间的事件,每个事件都包含一个开始和结束日期。对于最近的(当前)事件,结束日期为NULL。我试图折叠重复的行,只显示最早的开始日期和最后的结束日期。在日期字段中为NULL,该行将被忽略。我可以用NVL()虚拟一个结束日期值,但这
我有一个表,它有一系列基于时间的事件,每个事件都包含一个开始和结束日期。对于最近的(当前)事件,结束日期为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,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)

UPD:

SQL Fiddle

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,sysdate-2,sysdate-1)
    INTO t (val,sysdate-1,null)
    INTO t (val,e)
         VALUES (2,sysdate-.5)
    INTO t (val,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

Results:

| 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 |

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读