我有2列,我想将每行的值(小时)添加到下一行。
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
答案 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]
但是正如你在this sql-fiddle中所看到的那样,这个行是第三行的小时,因此增加了两个小时。此外,最后一行没有新日期,因为没有下一行。你想要的结果是错的吗?
答案 1 :(得分: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