关于表中前一天数据减去后一天数据

先根据需求 将需要的数据筛选出来建成一张临时表 ,这里把非整数型的数据取整了一下

 SELECT   CONVERT(char(12),CDATETIME_CREATED,111)AS 日期 ,CDEVICE_NO, convert(int,convert(numeric(18,9),CENERGY_VALUE)) AS 用水量
	INTO #table1
	FROM TBL_EAP_ENERGY_LOG	
	WHERE CDEVICE_NO LIKE '501%'and DATEDIFF(day,CDATETIME_CREATED,GETDATE())!=0 
	GROUP BY CDATETIME_CREATED,CDEVICE_NO,CENERGY_VALUE
	ORDER BY CDATETIME_CREATED

将得到的散乱数据 根据日期排序创建出两张相差一天的临时表

 SELECT ROW_NUMBER() OVER(ORDER BY 日期 asc) AS 序号, 日期, 
MAX(CASE CDEVICE_NO WHEN '50100015069' THEN 用水量 ELSE 0 END) AS '生活区',
MAX(CASE CDEVICE_NO WHEN '50100015044' THEN 用水量 ELSE 0 END) AS '一区',
MAX(CASE CDEVICE_NO WHEN '50100015051' THEN 用水量 ELSE 0 END) AS '二区'
INTO #table2
FROM #table1
WHERE DATEDIFF(day,日期,GETDATE())<6
GROUP BY 日期
SELECT ROW_NUMBER() OVER(ORDER BY 日期 asc) AS 序号,日期, 
MAX(CASE CDEVICE_NO WHEN '50100015069' THEN 用水量 ELSE 0 END) AS '生活区',
MAX(CASE CDEVICE_NO WHEN '50100015044' THEN 用水量 ELSE 0 END) AS '一区',
MAX(CASE CDEVICE_NO WHEN '50100015051' THEN 用水量 ELSE 0 END) AS '二区'
INTO #table3
FROM #table1
WHERE DATEDIFF(day,日期,GETDATE())<7 AND DATEDIFF(day,日期,GETDATE())>1
GROUP BY 日期
SELECT SUBSTRING(b.日期,6,8) 日期, CAST(b.生活区 AS INT) -CAST(a.生活区 AS INT) AS 生活区,CAST(b.一区 AS INT) -CAST(a.一区 AS INT) AS 一区,CAST(b.二区 AS INT) -CAST(a.二区 AS INT) AS 二区
 FROM #table3 a LEFT JOIN  #table2 b ON a.序号=b.序号

直接用CSAT函数将数据转为int型 根据序号关联两张表 然后直接相减就得到两天数据的差值

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值