查询每小时的累计量的SQL语句怎么写?

lengxl 2020-02-29 01:41:38
表结构和数据
时间 累计量
2020-02-24 00:01:00 100
2020-02-24 00:02:00 300
2020-02-24 00:03:00 400
..............
2020-02-24 23:59:00 3000

表数据每一分钟会插入一条,累计量会不断增加,现在需要查询统计每小时整点的时候累计量比上一小时整点的时候增加了多少?这个SQL语句怎么写,谢谢
...全文
1114 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
sichuanwww 2020-03-03
  • 打赏
  • 举报
回复
luj_1768 2020-03-03
  • 打赏
  • 举报
回复
select * from table1, where ... 把* 换成 COUNT 就行了。
lengxl 2020-03-02
  • 打赏
  • 举报
回复
引用 7 楼 Hello World, 的回复:
跨天的加一个时间段作为条件即可
版主,怎么加时间段,我自己试了一下不行,还需要你提供一下sql语句,谢谢
lengxl 2020-03-02
  • 打赏
  • 举报
回复
引用 9 楼 Hello World, 的回复:
类似以下:
DECLARE @t TABLE(时间 DATETIME,累计量 INT)
INSERT @t(时间, 累计量)
VALUES('2020-02-23 23:59:59',10),('2020-02-24 00:59:59',100),
('2020-02-24 01:30:00',200),('2020-02-24 01:59:59',300),
('2020-02-24 02:30:00',340),('2020-02-24 02:59:59',400),
('2020-02-24 03:30:00',440),('2020-02-24 03:59:59',500),
('2020-02-24 04:30:00',540),('2020-02-24 04:59:59',600),
('2020-02-24 05:30:00',640),('2020-02-24 05:59:59',700),
('2020-02-24 06:30:00',840),('2020-02-24 06:59:59',900)
;WITH t AS (SELECT * FROM @t WHERE 时间='2020-02-24 00:59:59'
UNION ALL SELECT a.* FROM @t a INNER JOIN t ON DATEADD(HOUR,1,t.时间) = a.时间 WHERE a.时间<'2020-2-25')
SELECT *,t.累计量-LAG(t.累计量) OVER (ORDER BY t.时间) 增量 FROM t
搞定了,谢谢版主
Hello World, 2020-03-02
  • 打赏
  • 举报
回复
跨天的加一个时间段作为条件即可
lengxl 2020-03-02
  • 打赏
  • 举报
回复
引用 9 楼 Hello World, 的回复:
类似以下:
DECLARE @t TABLE(时间 DATETIME,累计量 INT)
INSERT @t(时间, 累计量)
VALUES('2020-02-23 23:59:59',10),('2020-02-24 00:59:59',100),
('2020-02-24 01:30:00',200),('2020-02-24 01:59:59',300),
('2020-02-24 02:30:00',340),('2020-02-24 02:59:59',400),
('2020-02-24 03:30:00',440),('2020-02-24 03:59:59',500),
('2020-02-24 04:30:00',540),('2020-02-24 04:59:59',600),
('2020-02-24 05:30:00',640),('2020-02-24 05:59:59',700),
('2020-02-24 06:30:00',840),('2020-02-24 06:59:59',900)
;WITH t AS (SELECT * FROM @t WHERE 时间='2020-02-24 00:59:59'
UNION ALL SELECT a.* FROM @t a INNER JOIN t ON DATEADD(HOUR,1,t.时间) = a.时间 WHERE a.时间<'2020-2-25')
SELECT *,t.累计量-LAG(t.累计量) OVER (ORDER BY t.时间) 增量 FROM t
版主,我还需要查询2020-02-23 23:59:59到2020-02-24 00:59:59的增量90,这个数。我自己试了试,没弄出来,
Hello World, 2020-03-02
  • 打赏
  • 举报
回复
类似以下:
DECLARE @t TABLE(时间 DATETIME,累计量 INT)
INSERT @t(时间, 累计量)
VALUES('2020-02-23 23:59:59',10),('2020-02-24 00:59:59',100),
('2020-02-24 01:30:00',200),('2020-02-24 01:59:59',300),
('2020-02-24 02:30:00',340),('2020-02-24 02:59:59',400),
('2020-02-24 03:30:00',440),('2020-02-24 03:59:59',500),
('2020-02-24 04:30:00',540),('2020-02-24 04:59:59',600),
('2020-02-24 05:30:00',640),('2020-02-24 05:59:59',700),
('2020-02-24 06:30:00',840),('2020-02-24 06:59:59',900)
;WITH t AS (SELECT * FROM @t WHERE 时间='2020-02-24 00:59:59'
UNION ALL SELECT a.* FROM @t a INNER JOIN t ON DATEADD(HOUR,1,t.时间) = a.时间 WHERE a.时间<'2020-2-25')
SELECT *,t.累计量-LAG(t.累计量) OVER (ORDER BY t.时间) 增量 FROM t

lengxl 2020-03-01
  • 打赏
  • 举报
回复
引用 2 楼 Hello World, 的回复:
上面的增量忘记用当前累计量去减了
DECLARE @t TABLE(时间 DATETIME,累计量 INT)
INSERT @t(时间, 累计量)
VALUES('2020-02-24 00:00:00',100),
('2020-02-24 00:30:00',200),
('2020-02-24 01:00:00',300),
('2020-02-24 01:30:00',340),
('2020-02-24 02:00:00',400),
('2020-02-24 03:00:00',3000)
;WITH t AS (SELECT * FROM @t WHERE 时间='2020-02-24 00:00:00'
UNION ALL SELECT a.* FROM @t a INNER JOIN t ON DATEADD(HOUR,1,t.时间) = a.时间)
SELECT *,t.累计量-LAG(t.累计量) OVER (ORDER BY t.时间) 增量 FROM t
表数据每一分钟会插入一条,累计量会不断增加,如果表数据是这样的,需要查询出来2020-02-24这一天每个小时的增量,牵扯到跨天怎么处理? 表结构和数据 时间 累计量 2020-02-23 23:59:59 50 ........ 2020-02-24 00:59:59 100 2020-02-24 01:00:59 200 2020-02-24 01:01:59 300 .............. 2020-02-24 01:59:59 400 .............. 2020-02-24 22:59:59 2800 .............. 2020-02-24 23:59:59 3000 查询结果 2020-02-24 00:59:59 50 2020-02-24 01:59:59 300 .............. 2020-02-24 22:59:59 ..... 2020-02-24 23:59:59 200
lengxl 2020-03-01
  • 打赏
  • 举报
回复
引用 4 楼 Seagull16 的回复:
Replace CTE(with..as..) with Subquery
用子查询,sql语句怎么写
Seagull16 2020-03-01
  • 打赏
  • 举报
回复
Replace CTE(with..as..) with Subquery
lengxl 2020-02-29
  • 打赏
  • 举报
回复
引用 2 楼 Hello World, 的回复:
上面的增量忘记用当前累计量去减了
DECLARE @t TABLE(时间 DATETIME,累计量 INT)
INSERT @t(时间, 累计量)
VALUES('2020-02-24 00:00:00',100),
('2020-02-24 00:30:00',200),
('2020-02-24 01:00:00',300),
('2020-02-24 01:30:00',340),
('2020-02-24 02:00:00',400),
('2020-02-24 03:00:00',3000)
;WITH t AS (SELECT * FROM @t WHERE 时间='2020-02-24 00:00:00'
UNION ALL SELECT a.* FROM @t a INNER JOIN t ON DATEADD(HOUR,1,t.时间) = a.时间)
SELECT *,t.累计量-LAG(t.累计量) OVER (ORDER BY t.时间) 增量 FROM t
不用 with 。。。。 as能实现吗?
Hello World, 2020-02-29
  • 打赏
  • 举报
回复
上面的增量忘记用当前累计量去减了

DECLARE @t TABLE(时间 DATETIME,累计量 INT)
INSERT @t(时间, 累计量)
VALUES('2020-02-24 00:00:00',100),
('2020-02-24 00:30:00',200),
('2020-02-24 01:00:00',300),
('2020-02-24 01:30:00',340),
('2020-02-24 02:00:00',400),
('2020-02-24 03:00:00',3000)
;WITH t AS (SELECT * FROM @t WHERE 时间='2020-02-24 00:00:00'
UNION ALL SELECT a.* FROM @t a INNER JOIN t ON DATEADD(HOUR,1,t.时间) = a.时间)
SELECT *,t.累计量-LAG(t.累计量) OVER (ORDER BY t.时间) 增量 FROM t
Hello World, 2020-02-29
  • 打赏
  • 举报
回复
如果是查询某个确定的区间就好办,如果不确定某日期段内的起始区间可以先查出来:
以下示例简化了数量,仅用了整小时的,因为CET里会过滤的

DECLARE @t TABLE(时间 DATETIME,累计量 INT)
INSERT @t(时间, 累计量)
VALUES('2020-02-24 00:00:00',100),
('2020-02-24 01:00:00',300),
('2020-02-24 02:00:00',400),
('2020-02-24 03:00:00',3000)
;WITH t AS (SELECT * FROM @t WHERE 时间='2020-02-24 00:00:00'
UNION ALL SELECT a.* FROM @t a INNER JOIN t ON DATEADD(HOUR,1,t.时间) = a.时间)
SELECT *,LAG(t.累计量) OVER (ORDER BY t.时间) 增量 FROM t

22,298

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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