怎样计算相邻时间的数据相减

weixin_44405193 2019-08-29 09:57:18
怎样计算相邻时间的数据相减,29列的RM_value等于29列x_value减去28列的x_value,同样28列的RM_value等于28列x_value减去27列的x_value,大神求帮忙
...全文
196 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
小野马1209 2020-01-11
  • 打赏
  • 举报
回复
引用 6 楼 天性使然 的回复:
[quote=引用 1 楼 二月十六 的回复:]
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([Effective_Date] DATETIME,[X_value] decimal(18,8))
Insert #T
select N'2019-08-27 01:00:20.000',1.00 union all
select N'2019-08-29 09:18:44.000',2.50 union all
select N'2019-08-29 09:20:33.000',3.00
Go
--测试数据结束
;WITH cte AS (
Select *,ROW_NUMBER()OVER(ORDER BY Effective_Date) rn from #T
)
SELECT a.*,a.X_value-ISNULL(b.X_value,0) AS RM_value FROM cte a LEFT JOIN cte b ON a.rn=b.rn+1








借个楼,这样简单一点

SELECT *,X_value-ISNULL(LAG(X_value) OVER(ORDER BY Effective_Date),0) FROM #T[/quote]
LAG函数很多版本不支持,应该是新的数据库加出的函数
天性使然 2020-01-10
  • 打赏
  • 举报
回复
引用 1 楼 二月十六 的回复:
--测试数据
if not object_id(N'Tempdb..#T') is null
	drop table #T
Go
Create table #T([Effective_Date] DATETIME,[X_value] decimal(18,8))
Insert #T
select N'2019-08-27 01:00:20.000',1.00 union all
select N'2019-08-29 09:18:44.000',2.50 union all
select N'2019-08-29 09:20:33.000',3.00
Go
--测试数据结束
;WITH cte AS (
Select *,ROW_NUMBER()OVER(ORDER BY Effective_Date) rn from #T
)
SELECT a.*,a.X_value-ISNULL(b.X_value,0) AS RM_value FROM cte a LEFT JOIN cte b ON a.rn=b.rn+1

借个楼,这样简单一点 SELECT *,X_value-ISNULL(LAG(X_value) OVER(ORDER BY Effective_Date),0) FROM #T
weixin_44405193 2019-08-29
  • 打赏
  • 举报
回复
引用 1 楼 二月十六 的回复:
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([Effective_Date] DATETIME,[X_value] decimal(18,8))
Insert #T
select N'2019-08-27 01:00:20.000',1.00 union all
select N'2019-08-29 09:18:44.000',2.50 union all
select N'2019-08-29 09:20:33.000',3.00
Go
--测试数据结束
;WITH cte AS (
Select *,ROW_NUMBER()OVER(ORDER BY Effective_Date) rn from #T
)
SELECT a.*,a.X_value-ISNULL(b.X_value,0) AS RM_value FROM cte a LEFT JOIN cte b ON a.rn=b.rn+1



老哥厉害👍🏻
二月十六 2019-08-29
  • 打赏
  • 举报
回复
引用 2 楼 weixin_44405193 的回复:
老哥厉害
如果帮到你,记得结帖。
weixin_44405193 2019-08-29
  • 打赏
  • 举报
回复
老哥厉害👍🏻
二月十六 2019-08-29
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([Effective_Date] DATETIME,[X_value] decimal(18,8))
Insert #T
select N'2019-08-27 01:00:20.000',1.00 union all
select N'2019-08-29 09:18:44.000',2.50 union all
select N'2019-08-29 09:20:33.000',3.00
Go
--测试数据结束
;WITH cte AS (
Select *,ROW_NUMBER()OVER(ORDER BY Effective_Date) rn from #T
)
SELECT a.*,a.X_value-ISNULL(b.X_value,0) AS RM_value FROM cte a LEFT JOIN cte b ON a.rn=b.rn+1



weixin_44405193 2019-08-29
  • 打赏
  • 举报
回复
引用 3 楼 二月十六 的回复:
引用 2 楼 weixin_44405193 的回复:
老哥厉害
如果帮到你,记得结帖。
怎么结的

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧