日期:2014-05-18  浏览次数:20562 次

还是个SQL统计查询的问题 请高手帮忙!
表结构如下:
表结构为:煤矿名称(varchar(50)),传感器编号(varchar(10)),传感器名称(varchar(50)),传感器类型(varchar(10)),超限值(float),开始时间(datetime),结束时间(datetime)
例如:
A矿   c001   一层传感器   瓦斯   20.5   2007-1-10   10:10:20   2007-1-10   10:15:45
A矿   c001   一层传感器   瓦斯   35.5   2007-1-10   12:30:13   2007-1-10   12:30:23
A矿   c001   一层传感器   瓦斯   25       2007-1-10   18:45:12   2007-1-10   19:55:15
A矿   c002   一层传感器   瓦斯   18.1   2007-1-10   10:20:10   2007-1-10   10:25:10
A矿   c002   一层传感器   瓦斯   19.9   2007-1-10   13:10:44   2007-1-10   13:11:45

生成统计报表想得到的结果为:
矿名   编号   名称               类型   平均值   最大值     累计超上限次数   累计超上限时间
A矿     c001   一层传感器   瓦斯   27           35.5           3                           01:15:38
A矿     c002   一层传感器   瓦斯   19           19.9           2                           00:06:01

平均值、最大值和次数可以通过分组求平均、最大值和统计次数取的,如何取得每次超上限累计的时间和   请高手帮忙!谢谢了



------解决方案--------------------
--大致思路如下:

declare @t table(煤矿名称 varchar(50) ,传感器编号 varchar(10),
传感器名称 varchar(50),传感器类型 varchar(10),
当前值 float,开始时间 datetime,结束时间 datetime)

Insert into @t
select 'A矿 ', 'c001 ', '一层传感器 ', '瓦斯 ', '20.5 ', '2007-1-10 10:10:20 ', '2007-1-10 10:15:45 '
union select 'A矿 ', 'c001 ', '一层传感器 ', '瓦斯 ', '35.5 ', '2007-1-10 12:30:13 ', '2007-1-10 12:30:23 '
union select 'A矿 ', 'c001 ', '一层传感器 ', '瓦斯 ', '25 ', '2007-1-10 18:35:12 ', '2007-1-10 19:55:15 '
union select 'A矿 ', 'c002 ', '一层传感器 ', '瓦斯 ', '18.1 ', '2007-1-10 10:20:10 ', '2007-1-10 10:25:10 '
union select 'A矿 ', 'c002 ', '一层传感器 ', '瓦斯 ', '19.9 ', '2007-1-10 13:10:44 ', '2007-1-10 13:11:45 '

Select 煤矿名称,传感器编号,传感器名称,传感器类型,
cast(Avg(当前值) as decimal(18,1)) as 平均值,
cast(max(当前值) as decimal(18,1)) as 最大值,
累计超上限次数=count(*), 累计超上限时间=Convert(varchar(10),
cast(sum(datediff(ss,开始时间,结束时间))/86400.0 as datetime),108)
from @t as a
group by 煤矿名称,传感器编号,传感器名称,传感器类型