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

MySQL как да попълним липсващи дати в диапазона?

MySQL няма рекурсивна функционалност, така че остава да използвате трика с таблицата NUMBERS -

  1. Създайте таблица, която съдържа само нарастващи числа - лесно за изпълнение с помощта на auto_increment:

    DROP TABLE IF EXISTS `example`.`numbers`;
    CREATE TABLE  `example`.`numbers` (
      `id` int(10) unsigned NOT NULL auto_increment,
       PRIMARY KEY  (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    
  2. Попълнете таблицата с помощта на:

    INSERT INTO `example`.`numbers`
      ( `id` )
    VALUES
      ( NULL )
    

    ...за толкова стойности, колкото са ви необходими.

  3. Използвайте DATE_ADD за да създадете списък с дати, увеличавайки дните въз основа на стойността NUMBERS.id. Заменете „2010-06-06“ и „2010-06-14“ със съответните начални и крайни дати (но използвайте същия формат, ГГГГ-ММ-ДД) -

    SELECT `x`.*
      FROM (SELECT DATE_ADD('2010-06-06', INTERVAL `n`.`id` - 1 DAY)
              FROM `numbers` `n`
             WHERE DATE_ADD('2010-06-06', INTERVAL `n`.`id` -1 DAY) <= '2010-06-14' ) x
    
  4. LEFT JOIN към вашата таблица с данни въз основа на частта от време:

       SELECT `x`.`ts` AS `timestamp`,
              COALESCE(`y`.`score`, 0) AS `cnt`
         FROM (SELECT DATE_FORMAT(DATE_ADD('2010-06-06', INTERVAL `n`.`id` - 1 DAY), '%m/%d/%Y') AS `ts`
                 FROM `numbers` `n`
                WHERE DATE_ADD('2010-06-06', INTERVAL `n`.`id` - 1 DAY) <= '2010-06-14') x
    LEFT JOIN TABLE `y` ON STR_TO_DATE(`y`.`date`, '%d.%m.%Y') = `x`.`ts`
    

Ако искате да запазите формата на датата, използвайте функция DATE_FORMAT :

DATE_FORMAT(`x`.`ts`, '%d.%m.%Y') AS `timestamp`


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP - Използване на PDO с масив от клаузи IN

  2. Доктрина 2 и таблица с връзки много към много с допълнително поле

  3. Управление на MySQL база данни в cPanel с PHPMyAdmin

  4. Как да задам часовата зона на MySQL?

  5. MAKETIME() Примери – MySQL