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

Ngắt các khoảng thời gian bằng nhau vào cuối tháng

Bạn có thể tính số "chu kỳ" bằng truy vấn đệ quy, như sau.

Như đã trình bày trong phần nhận xét dưới câu hỏi của bạn, tôi không hiểu bạn muốn nói gì về cột "tuần" (và tôi nghi ngờ rằng có thể định nghĩa của bạn thực sự không nhất quán - để bạn làm rõ).

with
  r (plan, period, max_periods, start_date) as (
    select  plan, 1, max_periods, start_date
      from  table_1
    union all
    select  plan, period + 1, max_periods,
            least(start_date + 7, add_months(trunc(start_date, 'mm'), 1))
      from  r
      where period < max_periods
  )
select plan, period, start_date
from   r
;

PLAN     PERIOD START_DATE
---- ---------- ----------
A             1 2020-05-01
A             2 2020-05-08
A             3 2020-05-15
A             4 2020-05-22
A             5 2020-05-29
A             6 2020-06-01
A             7 2020-06-08
A             8 2020-06-15
A             9 2020-06-22
A            10 2020-06-29
A            11 2020-07-01
A            12 2020-07-08

Điều này dựa trên khoảng thời gian tối đa từ TABLE_1 và tôi hoàn toàn không sử dụng TABLE_2. Bạn có thể kết hợp hai bảng sau khi tạo tập kết quả này chỉ từ TABLE_1 hoặc điều chỉnh cách tiếp cận nếu cần.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chọn mà không có mệnh đề FROM trong Oracle

  2. cd:-M:tùy chọn không hợp lệ

  3. cách thêm hơn 1000 giá trị với mệnh đề NOT IN

  4. Làm cách nào để xuất kết quả thành các tab khác nhau của Excel trong Toad for Data Analyst?

  5. Làm cách nào để ngăn dbms_output.put_line cắt bỏ khoảng trắng ở đầu?