我有下表routes
及其有效期和到期日。
r_no name eff_date exp_date
1 test1 01-jun-2013 INF
2 test2 10-jun-2013 15-jun-2013
3 test3 01-jan-2013 25-jun-2013
4 test4 01-feb-2013 31-dec-2013
输入将由用户说出例如:2013年6月1日至2013年6月30日`
我需要在整个期间获得每天的路线计数。
Date Routes_Count
01-Jun-2013 3
02-Jun-2013 3
.
.
10-Jun-2013 4
.
.
20-Jun-2013 3
.
.
30-Jun-2013 2
有人可以帮我在Oracle 11g中使用单个查询获得上述结果吗?
答案 0 :(得分:1)
你可以这样做,
WITH cte AS
(SELECT TO_DATE ('01-jun-2013', 'dd-mon-yyyy') + LEVEL - 1 dte
FROM DUAL
CONNECT BY LEVEL <=
TO_DATE ('30-jun-2013', 'dd-mon-yyyy') + 1
- TO_DATE ('01-jun-2013', 'dd-mon-yyyy'))
SELECT cte.dte, COUNT (1)
FROM cte, routes
WHERE cte.dte BETWEEN NVL (routes.eff_date, '01-jan-0001')
AND NVL (routes.exp_date, '31-dec-4000')
GROUP BY cte.dte
ORDER BY 1;
这里cte
是我生成的临时表,它提供了6月1日到6月30日的所有日期。将此加入您的routes
表,以便日期在路线的有效和失效日期之内。请注意,如果没有exp_date或eff_date,我将其替换为将来太远或过去的日期。现在您已经获得了每个日期的所有路线,按日期分组,以获得计数。