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

Khó khăn với độ trễ thay đổi

Thay vì so sánh với ngày hủy trong hàng trước đó, bạn cần so sánh với ngày hủy gần nhất trong tất cả các hàng trước đó. SQL tiêu chuẩn có tùy chọn BỎ QUA NULLS để đạt được điều này, nhưng MySQL không hỗ trợ nó. May mắn thay, trong trường hợp của bạn, nó có thể được viết lại bằng cách sử dụng Giá trị tối đa tích lũy:

select t.*,
       datediff(start, prev_cancelled) as num_days_since_cancel
from (select dt.*,
             max(cancelled) over -- latest date per id
             (partition by id 
              order by start
              rows between unbounded preceding and 1 preceding) as prev_cancelled
      from dt
     ) t
-- remove negative duration
where datediff(start, prev_cancelled) >= 0;

Xem fiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Không thể tạo MySQL TRIGGER khi tôi sử dụng IS NOT NULL

  2. Làm thế nào để làm việc với javax.persistence.sql-load-script-source?

  3. MySQL - Cách chọn Tối thiểu và Tối đa trong một Truy vấn (UNION)

  4. lỗi khi cài đặt mysqlclient bằng pip vào MacOS Bigsur

  5. Làm thế nào để tìm số sê-ri không có khoảng trống trong mysql?