每个月的用电量的sql 语句

administratorv 2017-02-23 04:24:44
time bigint power bigint

1451577600 1000

1451577660 1002

1451577720 1005
.....

每条数据间隔60s power 差值为使用电量

求每小时的用电量。

...全文
531 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwfxgm 2017-02-24
  • 打赏
  • 举报
回复
每小时的电量,估计是需要用到lag。希望楼主自己来确认一下才行。
中国风 2017-02-23
  • 打赏
  • 举报
回复
标题党?看标题当成每月固定值汇总了?忽略#1

写一个SQL2012之后版本实现方法

猜一个结果,计算上一小时同一个小时之差

use Tempdb
go
--> --> 中国风(Roy)生成測試數據

if not object_id(N'Tempdb..#1') is null
drop table #1
Go
Create table #1([time] bigint,[power] bigint)
Insert #1
select 1451577600,1000 union all
select 1451577660,1002 union all
select 1451577720,1005
Go
Select [time],[power],[power]-LAG([power],1,0)OVER(ORDER BY time) AS 差值 from (Select ([time]-1)/360 AS time,SUM([power]) AS [power] from #1 GROUP BY ([time]-1)/360
) AS t


/*
time power 差值
4032159 1000 1000
4032160 2007 1007
*/
Tiger_Zhao 2017-02-23
  • 打赏
  • 举报
回复
60秒看成60分了,请忽略#2。
Tiger_Zhao 2017-02-23
  • 打赏
  • 举报
回复
WITH
/* 测试数据
table1(time,power) AS (
SELECT 1451577600,1000 UNION ALL
SELECT 1451577660,1002 UNION ALL
SELECT 1451577720,1005
),
*/
a AS (
SELECT time,
power,
ROW_NUMBER() OVER(ORDER BY time) rn
FROM table1
)
SELECT a1.time, -- 你喜欢用前一个时点还是后一个时点自己调整
a1.power - a0.power AS used_power
FROM a a0
JOIN a a1
ON a0.rn + 1 = a1.rn
ORDER BY a1.time

       time  used_power
----------- -----------
1451577660 2
1451577720 3
中国风 2017-02-23
  • 打赏
  • 举报
回复
360秒=1小时 e.g.
use Tempdb
go
--> --> 中国风(Roy)生成測試數據
 
if not object_id(N'Tempdb..#1') is null
	drop table #1
Go
Create table #1([time] bigint,[power] bigint)
Insert #1
select 1451577600,1000 union all
select 1451577660,1002 union all
select 1451577720,1005
Go
Select ([time]-1)/360 AS time,SUM([power]) AS [power] from #1 GROUP BY ([time]-1)/360


/*
time	power
4032159	1000
4032160	2007*/

27,580

社区成员

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

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