Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL Изберете диапазони от дати между серии от данни, разделени с NULL

Разглеждах вашия „по-сложен проблем“ (все още работя върху отговор), но ето решение за този проблем. Като се има предвид, че използвате прозоречни функции, предполагам, че използвате MySQL 8 и така можете да използвате и 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

Изход:

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

Демо на dbfiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL за избор на максимална стойност между времевите марки за включване и изключване плюс 3 секунди

  2. Премахнете дубликатите в списъка с обекти с Python

  3. Как да разреша грешката на mysql порт 3306 на wamp?

  4. Планировчикът на събития трябва да се изпълнява всеки месец

  5. Интегриране на MySQL с Python в Windows