sql时段用量的统计

来源:百度知道 编辑:UC知道 时间:2024/06/30 06:18:32
程序每隔几分钟就会采集一次数据(数据字段:value1和日期时间字段:curdate)
部分数据为:
curdate value1
------------------------------
2008-07-13 19:01:15 47310
.
.
.
2008-07-13 19:31:15 47370
2008-07-13 19:36:15 47380
2008-07-13 19:41:15 47382
2008-07-13 19:46:15 47383
2008-07-13 19:51:15 47388
2008-07-13 18:01:18 47388
2008-07-13 18:06:18 47388
2008-07-13 18:11:18 47388
2008-07-13 18:16:18 47390
我要统计每小时的value1的差值,例如19点的为47388-47310=70
注意时间是动态设定的 如2008-07-13到2008-07-15之间的就3天*24=72小时;
能用SQL实现最好,如果不能还望高手用代码帮忙实现一下,C和delphi都行。
分都用完了,还望高手见谅。
前几次用得太猛了,没分了

select curdate,max(value1)-min(value1) as value1
from
(
select
substring(convert(varchar(20),curdate,20),1,16) as curdate,value1
from
表名
where 条件(时间 between 开始时间 and 结束时间)
)a
group by curdate

这样就可以了.一个是把 时间之前的字段取出来.然后对这个进行分组统计.
注意 转换函数
convert(varchar(20),curdate,20)
然后对这个进行截取... 还好... 有的人啊.答了之后不给分 ...真没有素质...哎 ....

select
cast(year(curdate) as char(4))+'-'+cast(month(curdate) as varchar(2))+'-'+cast(day(curdate) as varchar(2))+' '+datepart(Hour,curdate),max(value1)-min(value1) [差值] from 表
group by year(curdate),month(curdate),day(curdate),datepart(Hour,curdate)

楼主给的分太少了,呵呵,加分

你最好在数据库中定义一个函数,取日期值为 年-月-日-时
然后对数据进行两个分组,取每小时最大的值和最小值.然后以自定义函数进行关联,大的-小的,就可以了,

总结,一个自定义函数+二个视图+ 一个查询
或者,一个自定义函数 + 一个查询(包括两个子查询)

自定义函数也可以不用,不过那样代码就不好看了.