2012-11-16 151 views
20

我有一個包含一系列基於時間的事件的表,每個事件都以開始和結束日期進行綁定。對於最近的(當前)事件,結束日期爲NULL。我試圖摺疊重複的行,只顯示最早的開始日期和最新的結束日期。在日期字段中有NULL的情況下,該行被忽略。我可以用NVL()虛擬一個結束日期值,但是這會導致前端邏輯搜索並替換該值。具有NULL值的Oracle SQL - max()

反正有沒有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; 

謝謝。

+2

你有很多的問題,你有沒有接受一個答案,你會得到你的問題更感興趣,如果你可以回去和標記答案正確的是(使用答案左側的勾號輪廓)。 – bendataclear

+1

我甚至沒有意識到接受功能。將返回並更新一些較舊的答案。 – nibeck

回答

20

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

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

嗯,密度級別。沒有解決這些分析功能。會給它一個旋轉,看看我能否得到它的工作。看起來很有希望。 – nibeck

+2

這很奇妙!謝謝。 – nibeck

+0

我需要MS SQL Server的這個類似的語法...有什麼想法嗎? –