Mysql
 sql >> база данни >  >> RDS >> 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 NUMBERS
      (id)
    VALUES
      (NULL)
    

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

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

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

       SELECT DATE(x.dt) AS dt,
              COALESCE(SUM(e.value), 0) AS sum_value
         FROM (SELECT DATE_ADD('2010-01-01', INTERVAL n.id - 1 DAY) AS dt
                 FROM numbers n
                WHERE DATE_ADD('2010-01-01', INTERVAL n.id -1 DAY) <= '2010-03-01' ) x
    LEFT JOIN ENTRY e ON DATE(e.datetime) = x.dt
                     AND e.entryid = 85
     GROUP BY DATE(x.dt) 
    

Защо числа, а не дати?

Просто - датите могат да се генерират въз основа на числото, както в примера, който предоставих. Това също означава използване на една таблица, в сравнение с една за тип данни.




  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 група по дата и конвертиране от времеви печат на unix

  2. Как да промените Root парола на MySQL или MariaDB в Linux

  3. Моят MySQL тригер не работи, прост синтаксис, не е сложен

  4. Как да конфигурирам Rails за достъп без парола до отдалечена база данни

  5. MySql. Как да използвате Self Join