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 煤矿名称,传感器编号,传感器名称,传感器类型
select a.煤矿名称,a.传感器编号,a.传感器名称,a.传感器类型,avg(当前值) as 平均值,max(当前值) as 最大值,b.当前时间 as 最大值时间 from [tablename] a group by a.煤矿名称,a.传感器编号,a.传感器名称,a.传感器类型 inner join [tablename] b on a.最大值=b.当前值
select a.煤矿名称,a.传感器编号,a.传感器名称,a.传感器类型,avg(当前值) as 平均值,max(当前值) as 最大值,b.当前时间 as 最大值时间 from [tablename] a group by a.煤矿名称,a.传感器编号,a.传感器名称,a.传感器类型 inner join [tablename] b on a.最大值=b.当前值 and a.传感器编号=b.传感器编号 and a.煤矿名称=b.煤矿名称
主键自动增长的,不在聚集中WangZWang(先来) 的方法 服务器: 消息 147,级别 16,状态 1,行 1 聚合不应出现在 WHERE 子句中,除非该聚合位于 HAVING 子句或选择列表所包含的子查询中,并且要对其进行聚合的列是外部引用。baoshan(石头) 的方法 显示 列名 最大值 无效
create table #temp (煤矿名称 varchar(50), 传感器编号 varchar(10), 传感器名称 varchar(50), 传感器类型 varchar(10), 当前值 decimal(10,1), 当前时间 varchar(50) ) insert into #temp select 'A矿','c001','一层传感器','瓦斯','2.5','2007-1-10 10:10:20' union all select 'A矿','c001','一层传感器','瓦斯','4.5','2007-1-10 12:30:13' union all select 'A矿','c001','一层传感器','瓦斯','4.0','2007-1-10 18:35:12' union all select 'A矿','c002','一层传感器','瓦斯','6.4','2007-1-10 10:20:10' union all select 'A矿','c002','一层传感器','瓦斯','4.4','2007-1-10 13:10:44' select * from #tempselect t1.煤矿名称,t1.传感器编号,t1.传感器名称,t1.传感器类型, avg(t1.当前值) as 平均值,max(t1.当前值) as 最大值,t1.当前时间 from #temp t1 where t1.当前时间 in (select 当前时间 from #temp where 当前值 in (select 最大值时间 from (select max(当前值) as 最大值时间,传感器编号 from #temp group by 传感器编号)t))group by t1.煤矿名称,t1.传感器编号,t1.传感器名称,t1.传感器类型,t1.当前时间-------- A矿 c001 一层传感器 瓦斯 4.500000 4.5 2007-1-10 12:30:13 A矿 c002 一层传感器 瓦斯 6.400000 6.4 2007-1-10 10:20: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 煤矿名称,传感器编号,传感器名称,传感器类型
A矿 c001 一层传感器 瓦斯 4.5 2007-1-10 12:30:13
如果通过SQL统计查询实现不了功能,是否是因为表结构设计的不合理?
inner join [tablename] b on a.最大值=b.当前值
inner join [tablename] b on a.最大值=b.当前值 and a.传感器编号=b.传感器编号 and a.煤矿名称=b.煤矿名称
服务器: 消息 147,级别 16,状态 1,行 1
聚合不应出现在 WHERE 子句中,除非该聚合位于 HAVING 子句或选择列表所包含的子查询中,并且要对其进行聚合的列是外部引用。baoshan(石头) 的方法
显示 列名 最大值 无效
--这句
当前值=max(a.当前值) --别把表别名丢了
(煤矿名称 varchar(50),
传感器编号 varchar(10),
传感器名称 varchar(50),
传感器类型 varchar(10),
当前值 decimal(10,1),
当前时间 varchar(50)
)
insert into #temp
select 'A矿','c001','一层传感器','瓦斯','2.5','2007-1-10 10:10:20' union all select 'A矿','c001','一层传感器','瓦斯','4.5','2007-1-10 12:30:13' union all select 'A矿','c001','一层传感器','瓦斯','4.0','2007-1-10 18:35:12' union all select 'A矿','c002','一层传感器','瓦斯','6.4','2007-1-10 10:20:10' union all select 'A矿','c002','一层传感器','瓦斯','4.4','2007-1-10 13:10:44'
select * from #tempselect t1.煤矿名称,t1.传感器编号,t1.传感器名称,t1.传感器类型,
avg(t1.当前值) as 平均值,max(t1.当前值) as 最大值,t1.当前时间
from #temp t1
where t1.当前时间 in
(select 当前时间 from #temp where 当前值 in
(select 最大值时间 from (select max(当前值) as 最大值时间,传感器编号 from #temp group by 传感器编号)t))group by t1.煤矿名称,t1.传感器编号,t1.传感器名称,t1.传感器类型,t1.当前时间--------
A矿 c001 一层传感器 瓦斯 4.500000 4.5 2007-1-10 12:30:13
A矿 c002 一层传感器 瓦斯 6.400000 6.4 2007-1-10 10:20:10
谢谢了 WangZWang(先来)