我有个表,有三个字段(name,value,time),其中name这个字段总共只有几个(例如name1、name2、name3),value就是指name的值(整数),time就是时间,每天每隔5分钟会写一次,现在要求的查询是,将某天每个name的最大值和发生的时间列出来,例如,表数据如下(只有一天的)
name  value   time
name1    10   2010-08-02 8:40
name1    31   2010-08-02 8:50
name2    24   2010-08-02 8:35
name2    21   2010-08-02 8:45
name3    11   2010-08-02 8:32
name3    51   2010-08-02 8:37
那么查询的结果应该是
name1    31   2010-08-02 8:50
name2    24   2010-08-02 8:35
name3    51   2010-08-02 8:37这个查询该怎么写啊,能不能一条语句完成?谢谢

解决方案 »

  1.   

    参考下贴中的多种方法http://topic.csdn.net/u/20091231/16/2f268740-391e-40f2-a15e-f243b2c925ab.html
    [征集]分组取最大N条记录方法征集,及散分....
      

  2.   

    其中的一种方法如下。
    select *
    from(
    select *
    from 我有个表
    order by name,value desc
    ) t
    group by name
      

  3.   

    分组取最大N条记录方法的效率值得关注,数据量大以后,只有
    select *
    from(
        select *
        from 我有个表
        order by name,value desc
    ) t
    group by name
    可行。
      

  4.   

    tryselect *
    from tb k
    where not exists(select * from tb where date(k.tiem)=date(time) and k.name=name and k.value<value)
      

  5.   

    select name,time, max(value) from 表 group by name