有一表字段如下
用户,日期,读数我要求如2009-10-1至2009-10-30日的用量,并要求最大值 ,最小值,以及对应的日期
用量等于 30号读数-1号读数,我用以下语句可以实现可以select AREAGUID,max(ddate) as maxddate,min(ddate) as minddate,max(METERNLLJ)-min(METERNLLJ) as MeterNLLJ,max(METERNLLJ) as aa,min(METERNLLJ) as bb from ( select AREAGUID from TWater where 
(to_char(DDate,'yyyy-mm-dd')='2009-10-1' or to_char(DDate,'yyyy-mm-dd')='2009-10-30') and AreaGuid = 407) xx group by AREAGUID但有一个问题,如果我1号的读数为1000,30号的读数为500,即1号>30号的读数(有很多这样的数),那么我取日期出来就错了,变成相反的了应该如何修改一下呢。谢谢

解决方案 »

  1.   

    我的意思是,比如我有两条记录 
    用户      读数    日期 
    1        1000    2009-10-1 
    1        500    2009-10-30 
    我查出的数据应该为 
    用户  用量  最大    最大对应日期    最小 最小对应日期 
    1    -500  1000  2009-10-1      500 2009-10-30 但上面SQL实际查出是 
    用户  用量  最大    最大对应日期    最小 最小对应日期 
    1    500  1000    2009-10-30    500 2009-10-1 不对呀日期不对应,而且用量也算错了 
      

  2.   

    你的最外层的from都没有ddate,METERNLLJ,第一个select从哪取?
      

  3.   

    你用max-min减出来当然是正的500
      

  4.   


    select a.AREAGUID,--用户号
           a.umax,--最大值
           a.umin,--最小值
           b.ddate umaxd,--最大值日期
           c.ddate umind,--最小值日期
           b.METERNLLJ-c.METERNLLJ umg --用量
    from (select AREAGUID,max(METERNLLJ) umax,min(METERNLLJ) umin
            from TWater
        group by AREAGUID) a,
         (select a.AREAGUID,a.METERNLLJ,a.ddate
            from TWater a,
                 (select AREAGUID,max(ddate) ddate
                    from TWater 
                group by AREAGUID) b 
           where a.AREAGUID = b.AREAGUID 
             and a.ddate = b.ddate
         ) b,
         (select a.AREAGUID,a.METERNLLJ,a.ddate
            from TWater a,
                 (select AREAGUID,min(ddate) ddate 
                    from TWater
                group by AREAGUID) b
           where a.AREAGUID = b.AREAGUID
             and a.ddate = b.ddate
         )c
    where a.AREAGUID = b.AREAGUID
    and a.AREAGUID = c.AREAGUID;