2014-10-17 2 views
1

2 개의 열이 있고 각 행의 값 (시간)을 다음 행에 추가하려고합니다.TSQL- 다음 행마다 값 추가

Date    Hour 
2014-01-13 13:00 0 
2014-01-13 14:00 3 
2014-01-13 16:00 2 

나는 다음과 같이 표시하는 새로운 날짜 열 갖고 싶어 : 당신은 DATEADD와 하위 쿼리를 사용할 수 있습니다

Date    Hour  **New_Date** 
2014-01-13 13:00 0   2014-01-13 16:00  
2014-01-13 14:00 3   2014-01-13 17:00 
2014-01-13 16:00 2   2014-01-13 18:00 
+1

당신이 가장 가능성이 당신이 실행중인 총과 DATEADD를 사용하여 여기에 무엇을하려고 할 수 있습니다. 누적 합계를 수행하는 방법은 사용중인 SQL Server의 버전에 따라 다릅니다. 2012 및 2014에는 LEAD 및 LAG 기능이있어 매우 간단합니다. 2008 년 및 그 이전 버전은 조금 더 도전적입니다. 누적 합계를 검색하면 많은 예제가 있습니다. –

답변

0

:

SELECT [Date], [Hour], 
     DATEADD(hour, (SELECT TOP 1 t2.[Hour] 
         FROM dbo.Tablename t2 
         WHERE t2.[Date] > t1.[Date] 
         ORDER BY t2.[Date]), [Date]) 
     AS [New_Date] 
FROM dbo.TableName t1 
ORDER BY [Date] 

을하지만 당신은 this sql-fiddle에서 볼 수 있듯이 seond 행은 세 번째 행의 시간이므로 두 시간을 추가합니다. 또한 마지막 행에는 다음 행이 없으므로 새로운 날짜가 없습니다. 원하는 결과가 잘못 되었습니까?

0

이 시도 ..

CREATE TABLE #temp 
    (
    [Date] DATETIME, 
    [Hour] INT 
) 

INSERT INTO #temp 
      ([Date],[Hour]) 
VALUES  ('2014-01-13 13:00:00',0), 
      ('2014-01-13 14:00:00',3), 
      ('2014-01-13 16:00:00',2) 

;WITH cte 
    AS (SELECT Row_number() 
        OVER(
        ORDER BY [date]) AS id, 
       * 
     FROM #temp) 
SELECT a.Date, 
     a.Hour, 
     Dateadd(hh, a.Hour, CASE 
          WHEN a.id != 1 THEN a.[date] 
          ELSE (SELECT TOP 1 date 
            FROM cte 
            ORDER BY id DESC) 
          END) newdate 
FROM cte a 
     LEFT JOIN cte b 
       ON a.id = b.id + 1 

출력

  Date    Hour    newdate 
2014-01-13 13:00:00.000 0  2014-01-13 16:00:00.000 
2014-01-13 14:00:00.000 3  2014-01-13 17:00:00.000 
2014-01-13 16:00:00.000 2  2014-01-13 18:00:00.000