Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Menemukan tanggal yang hilang secara berurutan

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;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-01792:jumlah maksimum kolom dalam tabel atau tampilan adalah 1000 kesalahan saat menggunakan WITH di sql

  2. Karakter escape Oracle SQL (untuk '&')

  3. Perubahan Grup Layanan di R12.2

  4. Cari nilai dalam nilai kolom yang menyimpan nilai yang dipisahkan koma

  5. Cara terbersih untuk membangun string SQL di Java