Untuk mendapatkan daftar ID sederhana dengan celah, tanpa detail lebih lanjut, Anda perlu melihat setiap ID secara terpisah, dan seperti yang disarankan @mikey, Anda dapat menghitung jumlah bulan dan melihat tanggal pertama dan terakhir untuk melihat apakah ada berapa banyak. bulan yang berlangsung.
Jika tabel Anda memiliki kolom bernama month
(sejak date
tidak diizinkan kecuali itu adalah pengenal yang dikutip) Anda bisa mulai dengan:
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
Kemudian bandingkan hitungan dengan rentang bulan, dalam having
klausa:
select id
from your_table
group by id
having count(month) != months_between(max(month), min(month)) + 1
order by id;
ID
----------
123
456
Jika Anda benar-benar dapat memiliki beberapa catatan dalam satu bulan untuk sebuah ID, dan/atau tanggal yang direkam mungkin bukan awal bulan, Anda dapat melakukan sedikit lebih banyak pekerjaan untuk menormalkan tanggal:
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;