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

MySQL Chọn phạm vi ngày giữa các chuỗi dữ liệu được phân tách bằng NULL

Tôi đã xem xét "vấn đề phức tạp hơn" của bạn (vẫn đang tìm câu trả lời) nhưng đây là một giải pháp cho vấn đề này. Cho rằng bạn đang sử dụng các hàm cửa sổ, tôi giả sử bạn đang sử dụng MySQL 8 và do đó, bạn cũng có thể sử dụng CTE:

WITH cte AS (SELECT DATE(`date_time`) AS `date`,
                    `data`,
                    MAX(`data`) OVER (ORDER BY `date_time` ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS `data_max`
             FROM `test`),
cte2 AS (SELECT `date`,
                `data`,
                `data_max`,
                CASE WHEN `data` < `data_max` THEN `data` - `data_max` END AS `data_diff`
         FROM cte)
SELECT `data_max`, 
       MIN(CASE WHEN `data_diff` IS NOT NULL THEN date END) AS diff_date_from,
       MAX(CASE WHEN `data_diff` IS NOT NULL THEN date END) AS diff_date_to
FROM cte2
GROUP BY `data_max`
HAVING diff_date_from IS NOT NULL

Đầu ra:

data_max    diff_date_from  diff_date_to
4           2017-01-04      2017-01-06
5           2017-01-09      2017-01-11
6           2017-01-13      2017-01-13

Bản trình diễn trên dbfiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tính tổng số tiền được trả từ một bảng do foreach tạo trong codeigniter

  2. MYSQL - Thứ tự các giá trị dấu thời gian tăng dần theo thứ tự, từ mới nhất đến cũ nhất?

  3. Cơn ác mộng java bị rò rỉ ... với vòng lặp và jdbc

  4. Liên kết MySQL Workbench với Máy chủ Từ xa của tôi

  5. Phiên bản cơ sở dữ liệu / Kiểm soát thay đổi cho dữ liệu không phải giản đồ?