2017-03-08 5 views
0

日付範囲の間にギャップを取得したいと思います。ギャップをMM IDで区切る必要があります。Netezzaの日付範囲でギャップを見つけるためのSQL

誰かが私がNetezzaの

に以下

INPUT解決するのに役立つてもらえ:1レコード(例:同じMM番号に2015年3月3日までの期間には、レコードが欠落していない

ID | MM Number | From | To 

12345|4444444 |2015-01-03 |2015-02-02 

12346|4444444 |2015-02-03 |2015-03-02 

< <を〜2015-04-02

12347|4444444 |2015-04-03 |2015-05-01 

12348|4444444 |2015-05-02 |2015-06-01 

12349|4444444 |2015-06-02 |2015-07-01 

12310|4444444 |2015-07-02 |2015-07-31 

< < missinグラム一つのレコード(例:2015年8月1日からの期間に同じMM番号なし記録2015年8月31日に

12310|4444444|2015-09-01|2015-09-30 

アウトプット予想:

MM No | Missing Start Date | Missing To Date 
4444444 |2015-03-03 |2015-04-02 
4444444 |2015-08-01 |2015-08-31 

私はテーブルをしました下のデータで

create table icr_tmp 
( 
ID VARCHAR2(15), 
NMI VARCHAR2(50), 
INVOICE_START_DATE DATE, 
INVOICE_END_DATE DATE); 

insert into icr_tmp values('12345','4444444','03/01/2015','02/02/2015'); 

insert into icr_tmp values('12346','4444444','03/02/2015','02/03/2015'); 

insert into icr_tmp values('12347','4444444','03/04/2015','01/05/2015'); 

insert into icr_tmp values('12348','4444444','02/05/2015','01/06/2015'); 

insert into icr_tmp values('12349','4444444','02/06/2015','01/07/2015'); 

insert into icr_tmp values('12310','4444444','02/07/2015','31/07/2015'); 

insert into icr_tmp values('12310','4444444','01/09/2015','30/09/2015'); 

以下は、Oracleでは完全に動作しますが、Netezzaでは動作しません。

Netezzaで上記のSQLを実行するにはどうすればよいですか?

答えて

0

あなたのクエリは、サブクエリがエイリアス化されていない場合、netezzaは不平を言うので、netezzaでは完璧に正常に動作するはずです。

select * 
from (
    select nmi 
    ,max(invoice_end_date) over(partition by nmi order by invoice_start_date) + 1 start_gap, 
    lead(invoice_start_date) over(partition by nmi order by invoice_start_date) - 1 end_gap 
    from icr_tmp 
) foo 
where start_gap <= end_gap; 
関連する問題