Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL Sélectionnez les plages de dates entre les séries de données séparées par NULL

J'ai examiné votre "problème plus complexe" (travaillant toujours sur une réponse) mais voici une solution à ce problème. Étant donné que vous utilisez des fonctions de fenêtre, je suppose que vous utilisez MySQL 8 et que vous pouvez également utiliser des 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

Sortie :

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

Démo sur dbfiddle