【问题标题】:TSQL- adding value of every row to the nextTSQL-将每一行的值添加到下一行
【发布时间】:2014-12-13 00:35:24
【问题描述】:

我有 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

【问题讨论】:

  • 您很可能可以使用运行总计和 DATEADD 来执行您在此处尝试执行的操作。您如何计算运行总计将取决于您使用的 sql server 版本。 2012 和 2014 具有 LEAD 和 LAG 功能,这使得这非常简单。 2008 年及更早的年份更具挑战性。搜索running total,你会发现很多例子。

标签: sql sql-server tsql date


【解决方案1】:

您可以使用带有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 中看到的那样,第二行增加了两个小时,因为那是第三行的小时。此外,最后一行没有新日期,因为没有下一行。你想要的结果错了吗?

【讨论】:

    【解决方案2】:

    试试这个..

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-19
      • 2022-09-25
      • 1970-01-01
      • 2014-09-24
      • 1970-01-01
      • 2012-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多