sql >> Databasteknik >  >> RDS >> Mysql

MySQL Välj datumintervall mellan dataserier separerade med NULL

Jag har tittat på ditt "mer komplexa problem" (jobbar fortfarande på ett svar) men här är en lösning på detta problem. Med tanke på att du använder fönsterfunktioner antar jag att du använder MySQL 8 och så även kan använda 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

Utdata:

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 på dbfiddle



  1. Finns det några SQL-validatorer som kan kontrollera syntax mot flera databasservrar?

  2. mysql join-tabell på sig själv

  3. Spotlight Tuning Pack Basic:Det bästa gratis verktyget för SQL-optimering

  4. Skapa ett jobb i Oracle med DBMS_JOB