首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

急求一SQL查询条件~只有这30分了~该怎么解决

2012-03-02 
急求一SQL查询条件~~只有这30分了~~~~已知SQL语句:SELECTBegdate,Enddate,sum(Unckqty)asUnckqtyfrom(SELE

急求一SQL查询条件~~只有这30分了~~~~
已知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
...                                               ...                                           ...
请问如何实现
如果那位兄弟,解决了,觉的分少,说下,马上申请新号再给分~~~~

[解决办法]
WHERE Begdate> =24 and mod(begdate,4) = 0
[解决办法]
使用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
[解决办法]
从你的描述来看,你的需求是在当前时刻的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 ;

热点排行
Bad Request.