Oracle में तिथि हेरफेर कार्यों की एक अच्छी सरणी . इस समस्या के लिए दो प्रासंगिक हैं
MONTHS_BETWEEN()
जो दो तिथियों के बीच महीनों की संख्या की गणना करता हैADD_MONTHS()
जो किसी तारीख को दिए गए महीनों की संख्या से बढ़ा देता है
हम आपकी तालिका के रिकॉर्ड द्वारा फैले सभी महीनों की एक तालिका बनाने के लिए इन कार्यों को जोड़ सकते हैं। फिर हम USER_INFO से उस कैलेंडर में सशर्त रूप से रिकॉर्ड में शामिल होने के लिए बाहरी जुड़ाव का उपयोग करते हैं। जब कोई रिकॉर्ड मेल नहीं खाता count(id)
शून्य होगा।
with cte as (
select max(trunc(created, 'MM')) as max_dt
, min(trunc(created, 'MM')) as min_dt
from user_info
)
, cal as (
select add_months(min_dt, (level-1)) as mth
from cte
connect by level <= months_between(max_dt, min_dt) + 1
)
select to_char(cal.mth, 'YYYY-MM') as operation
, count(id)
from cal
left outer join user_info
on trunc(user_info.created, 'mm') = cal.mth
group by rollup (cal.mth)
order by 1
/