2016-09-07 7 views
0

2つの日付列Date1Date2があります。私は、新しい列を作成したい:SQL Serverの2つの列の日付と次の最小の日付の比較

  • 新しい列NewDate1Date2にその値よりも大きいとget次の最小値にDate1'1994-03-31 00:00:00'から最初の行を使用して

  • 新しい列NewDate2Date2から最初の行を使用して'1995-01-12 00:00:00'Date1の値より大きくして次の最小値を取得します。

サンプルデータ:

Date1      Date2 
---------------------  --------------------- 
'1994-03-31 00:00:00'  '1995-01-12 00:00:00' 
'1994-03-31 19:27:00'  '1995-04-13 00:00:00' 
'1995-01-12 00:00:00'  '1995-04-13 09:29:00' 
'1995-04-13 00:00:00'  '1997-01-12 09:59:00' 
'1995-04-13 09:29:00'  '1999-07-19 00:00:00' 
'2008-04-04 00:00:00'  '2009-08-06 00:00:00' 
'2011-11-04 00:00:00'  '2013-04-01 00:00:00' 
'2013-04-01 00:00:00'  NULL 

私はこのようにしたい:

NewDate1     NewDate2 
---------------------  --------------------- 
'1994-03-31 00:00:00'  '1995-01-12 00:00:00' 
'1995-01-12 00:00:00'  '1995-04-13 00:00:00' 
'1995-04-13 00:00:00'  '1995-04-13 09:29:00' 
'1995-04-13 09:29:00'  '1997-01-12 09:59:00' 
'2008-04-04 00:00:00'  '2009-06-22 00:00:00' 
'2011-11-04 00:00:00'  '2013-04-01 00:00:00' 
'2013-04-01 00:00:00'  NULL 

正確にあなたの質問は何ですか事前

+0

どのような新しい列ですか?あなたは行を失ったようだ。 –

+0

私はLAG()とLEAD()が何をするのかを調べることをお勧めします。 – ZLK

+0

そこに行ったように見えるのは、Date1をNewDate1にコピーして行を削除したことだけです。それを説明したり、説明的なデータを投稿したりできますか?あなたの説明を読んで、私があなたが与えたデータによって説明されていないことをしたいと思うように思えます。 – Cato

答えて

1

このクエリは、2つの日付フィールドの間のすべての期間を指定します。これがあなたが探しているものなら、テーブルにリダイレクトしてください。

;with AllDates as (
select Date1 as DateField from Table1 
    union 
    select Date2 as DateField from Table1 
) 
select d1.DateField, min(d2.DateField) as NextDate 
from AllDates d1 
join AllDates d2 
    on d1.DateField < d2.DateField 
group by d1.DateField 
union 
select max(DateField), null from AllDates 
0

のおかげで? NewDate1列とNewDate2列にDate1列とDate2列の値を挿入する必要がありますか?

もしそうなら、:

INSERT INTO DESTINATION_TABLE(NewDate1, NewDate2) 
SELECT Date1, Date2 FROM WHATEVER_TABLE 

これは、解決すべきか、多分私は誤解?