sql - T-SQL addding值到下一行的每一行

  显示原文与译文双语对照的内容
0 0

我有 2列,我想将每一行的value(hour) 添加到下一行。

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

我希望有一个新的日期列显示如下:

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
时间:原作者:3个回答

0 0

可以将子查询与 DATEADD 一起使用:

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]

但是就像你在中看到的,这个 sql-fiddle seond行增加两个小时,因为那是第三个小时的行。 另外,最后一行没有新的日期,因为没有下一行。 你所期望的结果是错误的?

原作者:
0 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
原作者:
...