2016-07-14 81 views
1

我只有一個日期fromdate,我想要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 

我想另一個ToDate列,我想明年的名fromdate日期。

例如:

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()函數](https://msdn.microsoft.com/en-us/library/hh213125.aspx),它正是這樣做的。 –

+0

噢謝謝你,我不知道鉛()的任何信息。 – Vidhi

+0

「next name」是什麼意思?基於什麼順序? – 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 
相關問題