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

Oracle BI:Chọn tất cả các bản ghi từ tuần trước

Có thể xác định ngày bạn muốn bằng cách sử dụng kết hợp next_day và số học ngày thường. Đoạn mã dưới đây hẳn là khá gần, nhưng nó chưa được kiểm tra và có thể thất bại trong một số trường hợp góc, nhưng ít nhất bạn có được ý tưởng chung :)

where resolved_date >= next_day( trunc(sysdate) - interval '14' day, 'SUN')
  and resolved_date <  next_day( trunc(sysdate) - interval '7'  day, 'SUN')

trunc(sysdate) cắt ngắn ngày thành ngày; 2011-04-19 23:32:34 trở thành 2011-04-19 00:00:00, tức là xóa thành phần thời gian. next_day(sysdate, 'SUN') trả lại vào chủ nhật tiếp theo. Nếu sysdate là chủ nhật, thì chủ nhật tiếp theo sẽ được trả về.
Quan trọng :Tên ngày phải cùng ngôn ngữ với phiên của bạn.
interval chỉ là một cách tiêu chuẩn để cộng / trừ các đơn vị thời gian khác nhau từ một ngày.

Tổng hợp tất cả lại với nhau, logic cho ngày 19 tháng 4 năm 2011 sẽ là:

  1. Cắt ngắn sysdate => 2011-04-19 00:00:00
  2. trừ đi 14 ngày => 2011-04-05 00:00:00
  3. Tìm chủ nhật tiếp theo => 2011-04-10 00:00:00

... và

  1. Cắt ngắn sysdate => 2011-04-19 00:00:00
  2. trừ đi 7 ngày => 2011-04-12 00:00:00
  3. Tìm chủ nhật tiếp theo => 2011-04-17 00:00:00

.. dẫn đến truy vấn sau:

 where resolved_date >= timestamp '2011-04-10 00:00:00'
   and resolved_date <  timestamp '2011-04-17 00:00:00'

Tất cả các ngày giải quyết xảy ra vào hoặc sau giây đầu tiên của ngày 10:nhưng trước giây đầu tiên của ngày 17:thứ sẽ được bao gồm. Lưu ý rằng >=< không tương đương với between .

Lưu ý về hiệu suất:Tôi đảm bảo rằng Oracle ước tính chính xác phạm vi ngày là 7 ngày và sử dụng đúng thứ tự / phương pháp kết hợp. Nếu bạn mong đợi truy vấn chạy trong một thời gian, bạn có thể đủ khả năng để tính toán các ngày trong ứng dụng và cung cấp chúng dưới dạng các ngày tháng thay vì tính toán chúng một cách nhanh chóng như tôi đã làm ở trê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. Hiển thị các ràng buộc trong bảng

  2. Có cách nào để buộc Oracle thay đổi kế hoạch của truy vấn mà không sử dụng gợi ý không?

  3. Cách kết nối với Oracle khi di chuyển

  4. Làm thế nào để sử dụng bản ghi để lặp lại một con trỏ tham chiếu?

  5. Làm cách nào để bạn nhận được các kết quả được định dạng độc đáo từ một thủ tục Oracle trả về một con trỏ tham chiếu?