select to_char(rq,'yyyy-mm-dd') rq,max(sk),max(dm),max(data),min(sk),min(dm),min(data)
from table1 group by to_char(rq,'yyyy-mm-dd')

解决方案 »

  1.   

    select max(dm),max(data),min(data),max(sk),max(rq) from b group by trunc(rq,'dd');eg.
    SQL> select * from b;B1         B2         B3         B4
    ---------- ---------- ---------- -----------
    1          3          24-AUG-05  2005-8-24 1
    2          4          24-AUG-05  2005-8-24 1
    3          4          24-AUG-05  2005-8-24 1
    5          6          23-AUG-05  2005-8-23 1Executed in 0.016 seconds
    SQL> select max(b1),max(b2),min(b2),max(b3),max(b4) from b group by trunc(b4,'dd');MAX(B1)    MAX(B2)    MIN(B2)    MAX(B3)    MAX(B4)
    ---------- ---------- ---------- ---------- -----------
    5          6          6          23-AUG-05  2005-8-23 1
    3          4          3          24-AUG-05  2005-8-24 1Executed in 0.016 seconds
      

  2.   

    楼上理解错了,最大、最小值出现的时刻并不是简单的max(sk),min(sk)
    我觉得用分析函数最简单了,如果你的oracle是817以上版本的
    select distinct trunc(rq),--如果rq是date类型,如果是类似yyyy-mm-dd的字串类型直接用rq
           max(data) over(partition by trunc(rq)),
           min(data) over(partition by trunc(rq)),
           first_value(sk) over(partition by trunc(rq) order by data desc),--最大值出现的时刻
           first_value(sk) over(partition by trunc(rq) order by data)--最小值出现的时刻
    from table1
      

  3.   

    select a.rq,max(b.sk) maxsk,a.maxdata,min(c.sk) minsk,a.mindata
    from 
    (select to_char(rq,'yyyy-mm-dd') rq,max(data) maxdata,min(data) mindata
    from table1 group by to_char(rq,'yyyy-mm-dd')) a,
    table1 b,table1 c
    where to_char(b.rq,'yyyy-mm-dd')=a.rq and b.data=a.maxdata 
    and to_char(c.rq,'yyyy-mm-dd')=a.rq and c.data=a.mindata
    group by a.rq,a.maxdata,a.mindata