sql >> Databáze >  >> RDS >> Mysql

MySQL Vyberte rozsahy dat mezi datovými řadami oddělenými NULL

Díval jsem se na váš "složitější problém" (stále pracuji na odpovědi), ale zde je řešení tohoto problému. Vzhledem k tomu, že používáte funkce okna, předpokládám, že používáte MySQL 8, a tak můžete používat i 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

Výstup:

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

Ukázka na dbfiddle



  1. Jak vybrat řádek podle primárního klíče, jeden řádek „nad“ a jeden řádek „pod“ druhým sloupcem?

  2. MySQL dvojité znaménko rovnosti

  3. PostgreSQL na vzestupu:2018 Postgres Findings &2019 Trends

  4. Highchart - Zobrazení dat JSON - MYSQL / PHP