急求一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 ;