有个SQL不会写,大家帮帮忙,谢了

时间:2021-02-17 21:57:26
    有个SQL方面的问题需要请教一下,有一张表,里边有三个字段,一个自增ID、一个时间、一个数据值,这张表中的数据是从外部每隔三分钟写进来一次得到的,时间字段记录了数据写入的时间如2011-6-1 00:23:12,Value不需关注。有可能这张表已经记录了近两年的数据了,并且现在还每隔三分钟被写入一条数据。比如我想取最近两个月的数据看一下,很简单,因为有Time字段,但是3分钟一条,一天就是480条,2个月就是28800条,我觉得有点太多了,而且只是想看看这两个月的数据大体走势,所以我想设置个可变的数据采样时间,比如这个采样间隔是6小时,我以当前最新数据的时间为基准点取,这样的话一天也就只取到4条,两个月也就是240条数据,就能达到我的要求了。但是由于这个数据采样间隔时间可变,可设置1-24小时,取整数,所以想请教一下这个SQL该如何写?

7 个解决方案

#1


不要用当前时间,用数据里的最大时间就好,前提你的采样间隔必须是3的倍数
select * from tb where datediff(mi,[time],(select max([time] from tb)))%((6*60)/3)=0

#2


并且现在还每隔三分钟被写入一条数据
由于这个数据采样间隔时间可变,可设置1-24小时,取整数

这两句话不冲突吗?不好意思我没看懂.

#3


我觉得这样的 最好是根据每天一个小时、两个小时 (1-24小时)。。。
这样去平均值 这样更准确

#4


谢#1楼了,偶像。不过有个括号的位置摆错了,MAX那里,底下我给放回来了
select * from tb where datediff(mi,[time],(select max([time]) from tb))%((6*60)/3)=0

#5


引用 3 楼 zs621 的回复:
我觉得这样的 最好是根据每天一个小时、两个小时 (1-24小时)。。。
这样去平均值 这样更准确


的确也有这方面的需求,麻烦给写一下,谢谢额

#6


引用楼主 phoenix2010000 的回复:
    有个SQL方面的问题需要请教一下,有一张表,里边有三个字段,一个自增ID、一个时间、一个数据值,这张表中的数据是从外部每隔三分钟写进来一次得到的,时间字段记录了数据写入的时间如2011-6-1 00:23:12,Value不需关注。有可能这张表已经记录了近两年的数据了,并且现在还每隔三分钟被写入一条数据。比如我想取最近两个月的数据看一下,很简单,因为有Time字段,但是3分钟一条,一天就是……

 (6*60)/3  为什么非要除以3,不除也可以吧,直接就是间隔6小时取数据了。能不能写个取时间段内最大最小平均的SQL,还是上边的表,这个时间段也是1-24小时

#7


。能不能写个取时间段内最大最小平均的SQL,还是上边的表

 
DECLARE @begin DATETIME ,@end DATETIME
SELECT  @begin ='2011-6-28 12:00',@end='2011-6-28 18:00'

SELECT MAX(value),MIN(value),AVG(value)
FROM  mytable
WHERE  ttime>=@begin  AND  ttime <=@end 

#1


不要用当前时间,用数据里的最大时间就好,前提你的采样间隔必须是3的倍数
select * from tb where datediff(mi,[time],(select max([time] from tb)))%((6*60)/3)=0

#2


并且现在还每隔三分钟被写入一条数据
由于这个数据采样间隔时间可变,可设置1-24小时,取整数

这两句话不冲突吗?不好意思我没看懂.

#3


我觉得这样的 最好是根据每天一个小时、两个小时 (1-24小时)。。。
这样去平均值 这样更准确

#4


谢#1楼了,偶像。不过有个括号的位置摆错了,MAX那里,底下我给放回来了
select * from tb where datediff(mi,[time],(select max([time]) from tb))%((6*60)/3)=0

#5


引用 3 楼 zs621 的回复:
我觉得这样的 最好是根据每天一个小时、两个小时 (1-24小时)。。。
这样去平均值 这样更准确


的确也有这方面的需求,麻烦给写一下,谢谢额

#6


引用楼主 phoenix2010000 的回复:
    有个SQL方面的问题需要请教一下,有一张表,里边有三个字段,一个自增ID、一个时间、一个数据值,这张表中的数据是从外部每隔三分钟写进来一次得到的,时间字段记录了数据写入的时间如2011-6-1 00:23:12,Value不需关注。有可能这张表已经记录了近两年的数据了,并且现在还每隔三分钟被写入一条数据。比如我想取最近两个月的数据看一下,很简单,因为有Time字段,但是3分钟一条,一天就是……

 (6*60)/3  为什么非要除以3,不除也可以吧,直接就是间隔6小时取数据了。能不能写个取时间段内最大最小平均的SQL,还是上边的表,这个时间段也是1-24小时

#7


。能不能写个取时间段内最大最小平均的SQL,还是上边的表

 
DECLARE @begin DATETIME ,@end DATETIME
SELECT  @begin ='2011-6-28 12:00',@end='2011-6-28 18:00'

SELECT MAX(value),MIN(value),AVG(value)
FROM  mytable
WHERE  ttime>=@begin  AND  ttime <=@end