select 矿名,编号,名称,类型,avg(当前值) as 平均值,max(当前值) as 最大值,max(当前时间) as 最大值时间
from tablename
group by 矿名,编号,名称,类型

解决方案 »

  1.   

    max(当前时间) 拿出来的是最后一条记录的时间哦 可以在数据库上试试 我试过不行哦
      

  2.   

    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 煤矿名称,传感器编号,传感器名称,传感器类型
      

  3.   

    数据库就是这个结构,无其他主键标示前后顺序,上面就是第二条记录的时间是最大值时刻
    A矿 c001 一层传感器 瓦斯 4.5 2007-1-10 12:30:13
    如果通过SQL统计查询实现不了功能,是否是因为表结构设计的不合理?
      

  4.   

    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.当前值
      

  5.   

    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.煤矿名称
      

  6.   

    主键自动增长的,不在聚集中WangZWang(先来) 的方法
    服务器: 消息 147,级别 16,状态 1,行 1
    聚合不应出现在 WHERE 子句中,除非该聚合位于 HAVING 子句或选择列表所包含的子查询中,并且要对其进行聚合的列是外部引用。baoshan(石头) 的方法
    显示 列名 最大值 无效
      

  7.   

    --出现那个提示是你没有根据我的方法来写,要看清楚里面
    --这句 
             当前值=max(a.当前值)  --别把表别名丢了
      

  8.   

    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
      

  9.   

    又试了下WangZWang(先来) 的方法 确实是我忘写表别名了 不好意思
    谢谢了 WangZWang(先来)