Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL Pilih rentang tanggal antara seri data yang dipisahkan dengan NULL

Saya telah melihat "masalah Anda yang lebih kompleks" (masih mengerjakan jawaban) tetapi inilah solusi untuk masalah ini. Mengingat Anda menggunakan fungsi jendela, saya berasumsi Anda menggunakan MySQL 8 dan juga dapat menggunakan 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

Keluaran:

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

Demo di 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. Mysql - Bagaimana cara membandingkan dua objek Json?

  2. MySQL - menggunakan GROUP BY dan DESC

  3. kueri mysql mengembalikan false bahkan ketika nilai ADA di tabel? Mencoba mencari jika tidak ada di tabel?

  4. Urutan kolom dalam indeks multi-kolom di MySQL

  5. Urutan kueri MySQL berdasarkan beberapa item