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

Mysql Намерете липсващи периоди от време

В случай, че вашите интервали от дати няма да бъдат вложени или пресичащи се, можете да използвате трик с JOIN за създаване на набор от резултати. И така, за да изберете желания набор от записи, ще ви трябва:

SELECT
  *
FROM
(SELECT 
  ends.point AS date_start, 
  starts.point AS date_end 
FROM 
  (SELECT 
    d.date_end+INTERVAL 1 DAY AS point, 
    @n:[email protected]+1 AS num 
  FROM 
    d 
      CROSS JOIN (SELECT @n:=1) AS init0
  ) AS ends 
  INNER JOIN 
  (SELECT 
    d.date_start-INTERVAL 1 DAY AS point, 
    @m:[email protected]+1 AS num 
  FROM 
    d 
      CROSS JOIN (SELECT @m:=0) AS init1
  ) AS starts 
  ON ends.num=starts.num 
UNION ALL 
  SELECT 
    '2014-01-01', 
    MIN(date_start) - INTERVAL 1 DAY AS date_end
  FROM 
    d 
  HAVING 
    date_end>'2014-01-01' 
UNION ALL 
  SELECT 
    MAX(date_end)+INTERVAL 1 DAY AS date_start, 
    '2014-12-31' 
  FROM
    d 
  HAVING 
    date_start<'2014-12-31' 
) as dates
WHERE
  date_start<=date_end
ORDER BY 
  date_start;

което ще доведе до

+------------+------------+
| date_start | date_end   |
+------------+------------+
| 2014-01-01 | 2014-03-04 |
| 2014-04-11 | 2014-04-30 |
| 2014-06-06 | 2014-07-09 |
| 2014-08-16 | 2014-12-31 |
+------------+------------+

(цигулка защото това е тук)

За да „попълните“ вашата таблица, можете да използвате INSERT..SELECT синтаксис с SELECT запитване по-горе.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. AccountController, използващ MySQL в ASP.NET MVC

  2. Вмъкване на JSON обект в MySQL таблица с Angular/PHP

  3. Комбиниране на резултати от две таблици в JSON данни

  4. MySQL:изберете * от таблицата, където col IN (null, ) е възможно без ИЛИ

  5. Конвертиране на MySQL схема в Github Wiki?