gpt4 book ai didi

sql - 按先前组减去先前值 - SQL Server

转载 作者:行者123 更新时间:2023-12-02 01:30:16 24 4
gpt4 key购买 nike

这个问题之前已经问过,并且专门针对 MySQL 得到了很好的回答,但是我非常感谢你们帮助将这个问题翻译成 SQL Server。之前的帖子已关闭,我不想重新打开它们,因为它们已经很旧了。

下面是要查询的数据集,以及查询解决方案所需的输出。下面是此处发布的优秀 MySql 解决方案 (SQL best way to subtract a value of the previous row in the query?)。我的问题是如何使用 SQL Server 中的变量实现相同的结果。如果这是一个新手问题,我深表歉意,但我是 SQL Server 中变量的新手,并且我尝试根据有关 SQL Server 中变量的 MSDN 文档转换为 SQL Server 失败。

感谢您的帮助!

select
EL.SN,
EL.Date,
EL.EL.Value,
if( @lastSN = EL.SN, EL.Value - @lastValue, 0000.00 ) as Consumption,
@lastSN := EL.SN,
@lastValue := EL.Value
from
EnergyLog EL,
( select @lastSN := 0,
@lastValue := 0 ) SQLVars
order by
EL.SN,
EL.Date

我需要通过 SN 号获得基于前一个的消费值。这是我的数据:

表能源日志

SN     Date                 Value
2380 2012-10-30 00:15:51 21.01
2380 2012-10-31 00:31:03 22.04
2380 2012-11-01 00:16:02 22.65
2380 2012-11-02 00:15:32 23.11
20100 2012-10-30 00:15:38 35.21
20100 2012-10-31 00:15:48 37.07
20100 2012-11-01 00:15:49 38.17
20100 2012-11-02 00:15:19 38.97
20103 2012-10-30 10:27:34 57.98
20103 2012-10-31 12:24:42 60.83

这是我需要的结果:

SN      Date                 Value  consumption
2380 2012-10-30 00:15:51 21.01 0
2380 2012-10-31 00:31:03 22.04 1.03
2380 2012-11-01 00:16:02 22.65 0.61
2380 2012-11-02 00:15:32 23.11 0.46
20100 2012-10-30 00:15:38 35.21 0
20100 2012-10-31 00:15:48 37.07 1.86
20100 2012-11-01 00:15:49 38.17 1.1
20100 2012-11-02 00:15:19 38.97 0.8
20103 2012-10-30 10:27:34 57.98 0
20103 2012-10-31 12:24:42 60.83 2.85

最佳答案

通过使用 CTE,您将能够获取排序的数据,然后选择上一条记录。

WITH PREVCTE AS (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY SN ORDER BY MyDate) [RowNum]
FROM @myTable
)
SELECT A.SN,
A.MyDate,
A.[Value],
A.[Value] - COALESCE(B.[Value], A.[Value]) [Consumption]
FROM PREVCTE A LEFT OUTER JOIN PREVCTE B
ON A.RowNum - 1 = B.RowNum AND
A.SN = B.SN

SQL Fiddle Demo

关于sql - 按先前组减去先前值 - SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34680181/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com