2016-07-14 17 views
1

日付が1つしかありません。fromdateと、Fromdate,Todateのデータが必要です。私は次の名前のfromdateの日付を望んでいる別のToDate列をしたい日付範囲の開始日をSQL Serverの日付から日付に換算する方法

Name   FromDate 
--------------------------------------- 
Spisak, Gregory 2015-11-11 20:30:00.000 
Patel, Tejal 2015-11-12 00:50:00.000 
George, Legy 2015-11-12 03:52:00.000 
Gorny,Alexander 2015-11-12 10:05:00.000 
Weiner, Doron 2015-11-12 10:31:00.000 
Bajaj, Jimmy 2015-11-12 12:24:00.000 
Lee, Richard 2015-11-14 10:00:00.000 
Soria, Alfie 2015-11-14 11:15:00.000 
Weiner, Moshe 2015-11-16 09:37:00.000 
Kariolis,Ioannis2015-11-17 12:15:00.000 
Cleary, Tara A 2015-11-17 15:39:00.000 

は、ここに私のテーブルデータです。例えば

Name   FromDate    ToDate 
--------------------------------------------------------------- 
Spisak, Gregory 2015-11-11 20:30:00.000 2015-11-12 00:50:00.000 
Patel, Tejal 2015-11-12 00:50:00.000 2015-11-12 03:52:00.000 
+3

あなたが使用しているSQL Serverのバージョンが何をしようと? 2012年以降、[lead()function](https://msdn.microsoft.com/en-us/library/hh213125.aspx)を使用することができます。これはまさにこれです。 –

+0

ありがとうございます。私は鉛について何も知らなかった()。 – Vidhi

+0

「次の名前」とはどういう意味ですか?どのようなシーケンスに基づいて? – Squirrel

答えて

1

select *, todt from yourTable t 
outer apply 
(select top 1 FromDate todt from yourTable 
where FromDate>t.FromDate 
order by FromDate)a 
1
DECLARE @TEMP TABLE (_Date DATE) 


INSERT INTO @TEMP 
     ([_Date]) 
VALUES (GETDATE() -- _Date - date 
     ) 

INSERT INTO @TEMP 
     ([_Date]) 
VALUES (DATEADD(DAY, 1, GETDATE()) -- _Date - date 
     ) 

INSERT INTO @TEMP 
     ([_Date]) 
VALUES (DATEADD(DAY, 2, GETDATE()) -- _Date - date 
     ) 

INSERT INTO @TEMP 
     ([_Date]) 
VALUES (DATEADD(DAY, 3, GETDATE()) -- _Date - date 
     ) 

INSERT INTO @TEMP 
     ([_Date]) 
VALUES (DATEADD(DAY, 4, GETDATE()) -- _Date - date 
     ); 

WITH CTE 
      AS (SELECT * , 
         ROW_NUMBER() OVER (PARTITION BY '' ORDER BY [_Date]) rn 
       FROM  @TEMP 
      ) 
    SELECT CTE.[_Date] AS 'StartDate' , 
      CTE2.[_Date] AS 'EndDate' 
    FROM CTE 
      INNER JOIN CTE AS CTE2 ON CTE2.rn = CTE.rn + 1 
関連する問題