Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Tìm các ngày bị thiếu trong một chuỗi

Để có một danh sách đơn giản về các ID có khoảng trống, không có thêm chi tiết, bạn cần xem xét từng ID riêng biệt và như @mikey đã đề xuất, bạn có thể đếm số tháng và xem ngày đầu tiên và ngày cuối cùng để xem có bao nhiêu kéo dài nhiều tháng.

Nếu bảng của bạn có một cột được gọi là month (kể từ ngày date không được phép trừ khi đó là số nhận dạng được trích dẫn) bạn có thể bắt đầu bằng:

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

Sau đó, so sánh số lượng với khoảng tháng, trong một having mệnh đề:

select id
from your_table
group by id
having count(month) != months_between(max(month), min(month)) + 1
order by id;

        ID
----------
       123
       456

Nếu bạn thực sự có thể có nhiều bản ghi trong một tháng cho một ID và / hoặc ngày được ghi có thể không phải là ngày bắt đầu của tháng, bạn có thể làm thêm một chút công việc để chuẩn hóa ngày:

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. Khi nào / Tại sao Oracle thêm NaN vào một hàng trong bảng cơ sở dữ liệu

  2. Oracle WITH CLAUSE không hoạt động?

  3. Cách bật chế độ nhật ký lưu trữ trong cơ sở dữ liệu Oracle 19c

  4. Thay đổi kiểu dữ liệu trong oracle mà không xóa dữ liệu

  5. Cách sao chép dữ liệu từ cơ sở dữ liệu / bảng này sang cơ sở dữ liệu / bảng khác