如何在数据库中不同行的同一列中进行数学运算?

时间:2016-09-28 13:32:24

标签: sql sql-server

正如问题所示,除了不同的行之外,有没有办法在同一列上进行数学运算?

实施例。

Table A:                
    X   Y   Time    New_time
0   aaa bbb 5         3
1   aaa bbb 2         1
2   aaa bbb 1         null

我想找到每一行的时间差异。因此第0行将new_time设为3分钟。我该怎么做呢?

提前谢谢你。

2 个答案:

答案 0 :(得分:2)

您可以使用SQL Server 2012中引入的LEAD分析函数:

CREATE TABLE [dbo].[Times]
    (
      [ID] [INT] IDENTITY(1, 1)
                 NOT NULL ,
      [X] [NVARCHAR](50) NOT NULL ,
      [Y] [NVARCHAR](50) NOT NULL ,
      [Time] [INT] NOT NULL
    ); 


INSERT  INTO [dbo].[Times]
        ( X, Y, [Time] )
VALUES  ( 'aaa', 'bbb', 5 ),
        ( 'aaa', 'bbb', 2 ),
        ( 'aaa', 'bbb', 1 );

SELECT  * ,
        New_Time = [Time] - ( LEAD([Time]) OVER ( ORDER BY ID ) )
FROM    [Times];

输出将是:

enter image description here

答案 1 :(得分:1)

declare @Table1 table(id int, x varchar(10), y varchar(10), [time] int)
insert into @Table1 values
(0,'aaa', 'bbb', 5)
,(1,'aaa', 'bbb', 2)
,(2,'aaa', 'bbb', 1)

select *,
 [time] - LEAD([Time]) over(order by id)  as NewTime
from @Table1