Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL Selecionar intervalos de datas entre séries de dados separados com NULL


Eu estive olhando para o seu "problema mais complexo" (ainda trabalhando em uma resposta), mas aqui está uma solução para esse problema. Dado que você está usando funções de janela, estou assumindo que você está usando o MySQL 8 e também pode usar CTEs:
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

Resultado:
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

Demonstração no dbfiddle