sql >> Database >  >> RDS >> Mysql

MySQL Selecteer datumbereiken tussen gegevensreeksen gescheiden met NULL

Ik heb je "complexere probleem" bekeken (werk nog steeds aan een antwoord), maar hier is een oplossing voor dit probleem. Aangezien u vensterfuncties gebruikt, neem ik aan dat u MySQL 8 gebruikt en dus ook CTE's kunt gebruiken:

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

Uitgang:

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



  1. PHP genereert dynamische PDO-insert

  2. Null-waarden sorteren na alle andere, behalve speciaal

  3. MySQL-verbinding op afstand [niet zoals gewoonlijk]

  4. ververs html-pagina wanneer een nieuw sql-item is ingevoerd