Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL Wählen Sie Datumsbereiche zwischen Datenreihen aus, die durch NULL getrennt sind

Ich habe mir Ihr "komplexeres Problem" angesehen (noch an einer Antwort gearbeitet), aber hier ist eine Lösung für dieses Problem. Da Sie Fensterfunktionen verwenden, gehe ich davon aus, dass Sie MySQL 8 verwenden und daher auch CTEs verwenden können:

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

Ausgabe:

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 auf dbfiddle