SQL 日期之间的计算

标签 sql sql-server sql-server-2012

我有以下两列。

    Date     |  Market Value
------------------------------
 2016-09-08  |      100
 2016-09-07  |      130
 2016-09-06  |      140
 2016-09-05  |      180

我想添加一列来计算两个日期之间的市场值(value)差异。

    Date     |  Market Value   |  Delta 
------------------------------------------ 
 2016-09-08  |     100         | -30
 2016-09-07  |     130         | -10
 2016-09-06  |     140         | -40
 2016-09-05  |     180         | 

.

100 (2016-09-08) minus 130 (2016-09-07) = -30

如何编写该函数?

最佳答案

在 SQL Server 2012+ 中,最有效、最简单的方法是使用内置的 LEAD功能。

SELECT
    [Date]
    ,[Market Value]
    ,LEAD([Market Value]) OVER (ORDER BY [Date] DESC) - [Market Value] AS Delta
FROM YourTable
;

LEAD 返回其 ORDER BY 子句指定的下一行的值。

所有其他自连接表的方法效率较低。

关于SQL 日期之间的计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39391939/

相关文章:

sql-server - 在 VBA 中执行存储过程的两种方式,哪一种更好?

c# - 返回插入的 IDENT_CURRENT

SQL Server - 按情况排序

mysql - 为什么 MySQL 在搜索索引列时不锁定行

sql-server - IF 子句中的短路

sql计算两次之间的两个日期的分钟数

MySQL 语法用于链接来自不同表的两行,其中它们都有一个公共(public)字段

sql - T-SQL 通过入站变量拉取特定月份的数据

sql - 我无法更改 SQL Server 浏览器的启动模式

sql - 如何为每个用户获取具有最小值和最大值的唯一记录