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

SQL的统计查询问题!请高手帮忙
表结构为:煤矿名称(varchar(50)),传感器编号(varchar(10)),传感器名称(varchar(50)),传感器类型(varchar(10)),当前值(float),当前时间(datetime)
例如:
A矿   c001   一层传感器   瓦斯   2.5   2007-1-10   10:10:20
A矿   c001   一层传感器   瓦斯   4.5   2007-1-10   12:30:13
A矿   c001   一层传感器   瓦斯   4.0   2007-1-10   18:35:12
A矿   c002   一层传感器   瓦斯   6.4   2007-1-10   10:20:10
A矿   c002   一层传感器   瓦斯   4.4   2007-1-10   13:10:44

生成统计报表想得到的结果为:
矿名   编号   名称               类型   平均值   最大值   最大值时间
A矿     c001   一层传感器   瓦斯   3.7         4.5         2007-1-10   12:30:13
A矿     c002   一层传感器   瓦斯   5.4         6.4         2007-1-10   10:20:10

平均值和最大值可以通过分组求平均和最大取的,如何取得最大值时的时间请高手帮忙!谢谢了

------解决方案--------------------
declare @t table(煤矿名称 varchar(50) ,传感器编号 varchar(10),
传感器名称 varchar(50),传感器类型 varchar(10),
当前值 float,当前时间 datetime)

Insert into @t
select 'A矿 ', 'c001 ', '一层传感器 ', '瓦斯 ', '2.5 ', '2007-1-10 10:10:20 '
union select 'A矿 ', 'c001 ', '一层传感器 ', '瓦斯 ', '4.5 ', '2007-1-10 12:30:13 '
union select 'A矿 ', 'c001 ', '一层传感器 ', '瓦斯 ', '4.0 ', '2007-1-10 18:35:12 '

union select 'A矿 ', 'c002 ', '一层传感器 ', '瓦斯 ', '6.4 ', '2007-1-10 10:20:10 '
union select 'A矿 ', 'c002 ', '一层传感器 ', '瓦斯 ', '4.4 ', '2007-1-10 13:10:44 '

Select 煤矿名称,传感器编号,传感器名称,传感器类型,
cast(Avg(当前值) as decimal(18,1)) as 平均值,
cast(max(当前值) as decimal(18,1)) as 最大值,
最大值时间=(Select top 1 当前时间 from @t
where 煤矿名称=a.煤矿名称 and 传感器编号=a.传感器编号
and 传感器类型=a.传感器类型 and 当前值=max(a.当前值))
from @t as a
group by 煤矿名称,传感器编号,传感器名称,传感器类型