अंतराल के साथ आईडी की एक सरल सूची प्राप्त करने के लिए, बिना किसी और विवरण के, आपको प्रत्येक आईडी को अलग से देखना होगा, और जैसा कि @mikey ने सुझाव दिया है कि आप महीनों की संख्या गिन सकते हैं और पहली और आखिरी तारीख देख सकते हैं कि कितने महीने जो फैले हुए हैं।
अगर आपकी टेबल में month
. नाम का कॉलम है (date
से इसकी अनुमति नहीं है जब तक कि यह एक उद्धृत पहचानकर्ता न हो) आप इसके साथ शुरू कर सकते हैं:
select id, count(month), min(month), max(month),
months_between(max(month), min(month)) + 1 as diff
from your_table
group by id
order by id;
ID COUNT(MONTH) MIN(MONTH) MAX(MONTH) DIFF
---------- ------------ ---------- ---------- ----------
123 8 01-JUN-14 01-JUL-15 14
456 7 01-MAR-14 01-NOV-14 9
789 7 01-MAR-14 01-SEP-14 7
फिर एक having
. में, महीने की अवधि के साथ गिनती की तुलना करें खंड:
select id
from your_table
group by id
having count(month) != months_between(max(month), min(month)) + 1
order by id;
ID
----------
123
456
यदि आपके पास वास्तव में एक आईडी के लिए एक महीने में कई रिकॉर्ड हो सकते हैं, और/या दर्ज की गई तारीख महीने की शुरुआत नहीं हो सकती है, तो आप तारीखों को सामान्य करने के लिए थोड़ा और काम कर सकते हैं:
select id,
count(distinct trunc(month, 'MM')),
min(trunc(month, 'MM')),
max(trunc(month, 'MM')),
months_between(max(trunc(month, 'MM')), min(trunc(month, 'MM'))) + 1 as diff
from your_table
group by id
order by id;
select id
from your_table
group by id
having count(distinct trunc(month, 'MM')) !=
months_between(max(trunc(month, 'MM')), min(trunc(month, 'MM'))) + 1
order by id;