我使用以下查询:
SELECT TO_CHAR(ADD_MONTHS(SYSDATE, wdl_month_interval), 'Mon YYYY') AS month
,wdl_size_expiring_kb/1024 AS size_expiring_mb
FROM WIKI_DATA_LIFESPAN
AND wdl_month_interval < 0
AND wdl_month_interval >= -6
返回以下内容:
2013年9月0.017578125
2013年10月0.3076171875
虽然查询的目的是返回所有过去6个月,如果没有记录,则返回0代替wdl_size_expiring_kb变量。我最初想过使用一个循环到-6到-1的变量来显示最近6个月。但我不太清楚最有效的方法是什么。任何人都可以提出任何其他想法,以确定采取什么路线?
非常感谢你的帮助:)
答案 0 :(得分:0)
Oracle为此提供了数据密集语法,称为“分区外连接”。您选择具有可能缺少元素的数据集(您有查询),并将分区外部连接到所需数据值列表。
11.2文档有一个很好的描述和例子:http://docs.oracle.com/cd/E11882_01/server.112/e25554/analysis.htm#DWHSG02013
答案 1 :(得分:0)
你可以沿着这些线尝试一些东西,首先创建序列0 .. -6,然后创建外部连接:
with seq(i) as (
select 0 i from dual
union all
select i-1
from seq
where i>-6
)
select TO_CHAR(ADD_MONTHS(SYSDATE, seq.i), 'Mon YYYY') AS month ,
,wdl_size_expiring_kb/1024 AS size_expiring_mb
from seq
left join WIKI_DATA_LIFESPAN on (wdl_month_interval = seq.i)