小弟新学 接到一个任务 大体描述是这样的
每天的每个小时有几百条数据存入数据库     表项可以理解为这样    id date hour data
现在需要根据date找出每个小时data的最大值的记录返回
我的想法是子查询找到max的记录然后返回id给上层 但是实在想不出怎么实现
请各位多多指点数据库

解决方案 »

  1.   

    select * from tab a
    where not exists (
    select 1 from tab b
    where b.[date] = a.[date]
    and b.data > a.data
    )
      

  2.   

    select * from tb t 
    where data=(select max(data) from tb where date=t.date and hour=t.hour 
    group by date,hour)
      

  3.   

    这样内外层用data匹配的话出来的数据特殊情况下有可能是不严谨的吧 
      

  4.   


    怎么会呢,相关子查询,外部查询与内部子查询是有关联条件的,
    date=t.date and hour=t.hour 
    也就是当前时间消失内,只返回一个最大值data的数据,不然写这个关联条件干嘛
      

  5.   

    我照你的方法做了个实验...结果数据一条都没有过滤掉 跟select * from出的数据一样的...
      

  6.   

    你好 我看了你的帖子 觉得你写的第一条描述的跟我要的应该是差不多的 但是我找着写了下还是得不到想要的结果 我的想法应该是结果中只有24条数据 每一小时找出一个最大值 但是我想不明白怎么改
    SELECT a.* FROM ta a
        WHERE NOT EXISTS(SELECT 1 FROM ta WHERE cid=a.cid AND id<a.id)
      

  7.   


    select * from tb t
    cross apply(select maxdata=max(data) from tb where date=t.date and hour=t.hour)tt
      

  8.   

    楼上的代码错了,select *,最大值=max(data) over(partition by date,hour) from tb
      

  9.   


    select *,maxdata=max(data) over(partition by tb.date,tb.hour) from tb