首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQL查询每小时,每日,每月的平均值

2013-01-23 
SQL查询每小时,每天,每月的平均值SQL查询每小时,每天,每月的平均值:有这么一个Table表:timeidv001v002v003

SQL查询每小时,每天,每月的平均值
SQL查询每小时,每天,每月的平均值:
有这么一个Table表:
timeid                v001   v002  v003  v004
2008-01-01 01:05:00     1     2     3      4
2008-01-01 01:25:00     1     2     3      4
2008-01-01 01:55:00     1     2     3      4
2008-01-01 02:05:00     1     2     3      4
2008-01-01 02:25:00     1     2     3      4
2008-01-01 02:55:00     1     2     3      4
..
..
..
2008-01-01 23:55:00     1     2     3      4
2008-01-02 01:05:00     1     2     3      4
..
..
2008-01-02 23:55:00     1     2     3      4
...
...
...
2008-01-31 23:55:00     1     2     3      4
每小时平均值查询指的是:如2008-01-01 01:05:00-----2008-01-01 01:55:00之间的值的平均
每天平均值查询指的是:如2008-01-01 01:05:00-----2008-01-01 23:55:00之间的值的平均
每月平均值查询指的是:如2008-01-01 01:05:00-----2008-01-31 23:55:00之间的值的平均
timeid 是samlltimedate
[解决办法]

--#1.每小时平均值
select year(timeid), MONTH(timeid), DAY(timeid), DATEPART(hour, timeid), AVG(v001), AVG(v002), AVG(v003), AVG(v004)
from tb
group by year(timeid), MONTH(timeid), DAY(timeid), DATEPART(hour, timeid)
--#2.每天平均值
select year(timeid), MONTH(timeid), DAY(timeid), AVG(v001), AVG(v002), AVG(v003), AVG(v004)
from tb
group by year(timeid), MONTH(timeid), DAY(timeid)
--#3.每月平均值
select year(timeid), MONTH(timeid), AVG(v001), AVG(v002), AVG(v003), AVG(v004)
from tb
group by year(timeid), MONTH(timeid)

[解决办法]
引用:
这是显示一条内容。
那显示24个小时的怎么写呢
那显示28天,29天,30天,或31天的内容怎么写
显示12个月的、求指教!

如果你查询的数据都存在,好办.如果缺少,则需要构造临时表,然后使用左连接来做.看懂下面的例,其他的就明白了.

获取两个时间之内的所有日期

--sql 2000
declare @sdate datetime
declare @edate datetime
set @sdate = '2008-10-15 00:00:000'
set @edate = '2009-02-10 00:00:000'


select 
    dateadd(dd,num,@sdate) dt
from 
    (select isnull((select count(1) from sysobjects where id<t.id),0) as num from sysobjects t) a
where
    dateadd(dd,num,@sdate)<=@edate




--sql 2005
declare @startDate datetime
declare @endDate datetime

SELECT @startDate = '2008-10-15' ,@endDate = '2009-01-23'
;WITH tb AS (
SELECT @startDate AS 'date'
UNION ALL
SELECT DATEADD(DAY,1,date) FROM tb WHERE DATE<@endDate
)
SELECT tb.date from tb

热点排行