已知SQL语句:
SELECT Begdate,Enddate, sum(Unckqty) as Unckqty from (  
 SELECT * FROM ( SELECT  TRUNC(((sysdate-(CASE WHEN (Upd_date='' or Upd_date is null)  THEN Pur_date ELSE Upd_date END)  )*24))  Begdate , 
 TRUNC( ((sysdate-(CASE WHEN (Upd_date='' or Upd_date is null)  THEN Pur_date ELSE Upd_date END)  )*24)+3 ) Enddate,  
 COUNT (Vendor)  Unckqty FROM  TABLE1 WHERE (Cfm_status=0)  
 GROUP BY ((sysdate-(CASE WHEN (Upd_date='' or Upd_date is null)  THEN Pur_date ELSE Upd_date END)  )*24),  
 ((sysdate-(CASE WHEN (Upd_date='' or Upd_date is null)  THEN Pur_date ELSE Upd_date END)  )*24)+3)  
 WHERE Begdate>=24  
 )group by Begdate,Enddate ORDER BY Begdate 
得到查询结果:
BEGDATE                   ENDDATE                        UNCKQTY
24                      27                   12
25                      28                    1
26                      29                    2
27                      30                    5
...                       ...                     ...
现在要得到如下结果:
BEGDATE                ENDDATE                                  UNCKQTY
24                      27                   12
28                      31                   1
32                      35                   2
36                      39                   5
...                       ...                     ...
请问如何实现
如果那位兄弟,解决了,觉的分少,说下,马上申请新号再给分~~~~

解决方案 »

  1.   

    说错了~~~~可以不考虑UNCKQTY只考虑BEGDATE                ENDDATE
      

  2.   

    WHERE Begdate>=24  and mod(begdate,4) = 0
      

  3.   

    使用rownum
    SELECT Begdate + (mynum-1)*4, Enddate + (mynum-1)*4, sum(Unckqty) as Unckqty
      from (SELECT *
              FROM (SELECT TRUNC(((sysdate - (CASE
                                   WHEN (Upd_date = '' or Upd_date is null) THEN
                                    Pur_date
                                   ELSE
                                    Upd_date
                                 END)) * 24)) Begdate,
                           TRUNC(((sysdate - (CASE
                                   WHEN (Upd_date = '' or Upd_date is null) THEN
                                    Pur_date
                                   ELSE
                                    Upd_date
                                 END)) * 24) + 3) Enddate,
                           COUNT(Vendor) Unckqty,rownum mynum
                      FROM TABLE1
                     WHERE (Cfm_status = 0)
                     GROUP BY ((sysdate - (CASE
                                WHEN (Upd_date = '' or Upd_date is null) THEN
                                 Pur_date
                                ELSE
                                 Upd_date
                              END)) * 24),
                              ((sysdate - (CASE
                                WHEN (Upd_date = '' or Upd_date is null) THEN
                                 Pur_date
                                ELSE
                                 Upd_date
                              END)) * 24) + 3)
             WHERE Begdate >= 24)
     group by Begdate, Enddate
     ORDER BY Begdate
      

  4.   

    从你的描述来看,你的需求是在当前时刻的24小时以前,求每四个小时Unckqty的合计数。
    如果我没有理解错误的话,可以发现只需要按照开始时间做每四个小时的分组就可以了,分组条件加上Enddate没有什么意义,只需要加上3个小时表示一个时间就可以了。
    你可以试试下面的语句:
    SELECT Begdate,Enddate, sum(Unckqty) as Unckqty from (
    SELECT TRUNC(((sysdate-(CASE WHEN (Upd_date='' or Upd_date is null) THEN Pur_date ELSE Upd_date END) )*6))*4 Begdate ,
    TRUNC( ((sysdate-(CASE WHEN (Upd_date='' or Upd_date is null) THEN Pur_date ELSE Upd_date END) )*6)) *4 + 3 Enddate,
    COUNT (Vendor) Unckqty FROM TABLE1 WHERE (Cfm_status=0)
    GROUP BY TRUNC((sysdate-(CASE WHEN (Upd_date='' or Upd_date is null) THEN Pur_date ELSE Upd_date END) )*6) *4
    ) WHERE Begdate>=24
    group by Begdate,Enddate ORDER BY Begdate ;