sql >> Databáze >  >> RDS >> Mysql

Počet dat MySQL za posledních 7 dní

MySQL nemá rekurzivní funkce, takže vám zbývá použít trik s tabulkou NUMBERS -

  1. Vytvořte tabulku, která obsahuje pouze rostoucí čísla – snadno to uděláte pomocí 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. Naplňte tabulku pomocí:

    INSERT INTO NUMBERS
      (id)
    VALUES
      (NULL)
    

    ...pro tolik hodnot, kolik potřebujete.

  3. Použijte DATE_ADD k vytvoření seznamu dat, zvýšením dnů na základě hodnoty NUMBERS.id. Nahraďte „2010-01-01“ a „2010-01-02“ příslušným datem zahájení a ukončení (použijte však stejný formát, RRRR-MM-DD HH:MM:SS). V tomto příkladu jsem odečetl hodnotu NUMBERS.id od CURRENT_DATE, abych získal seznam sekvenčních hodnot data za poslední týden -

    SELECT x.dt
      FROM (SELECT DATE_SUB(CURRENT_DATE, INTERVAL (n.id - 1) DAY) AS dt
              FROM numbers n
             WHERE n.id <= 7 ) x
    
  4. VLEVO PŘIPOJTE se k vaší tabulce dat na základě části data a času.

       SELECT x.dt,
               COUNT(v.aid) AS num
         FROM (SELECT DATE_SUB(CURRENT_DATE, INTERVAL (n.id - 1) DAY) AS dt
                 FROM numbers n
                WHERE n.id <= 7 ) x
    LEFT JOIN VOTES v ON DATE(FROM_UNIXTIME(v.timestamp)) = DATE(x.dt)
     GROUP BY x.dt
     ORDER BY x.dt
    

Proč čísla, ne data?

Jednoduché - data lze generovat na základě čísla, jako v příkladu, který jsem uvedl. Znamená to také použití jedné tabulky, řekněme jedné pro každý datový typ.

Dříve:

  SELECT DATE(FROM_UNIXTIME(v.timestamp)) AS dt,
         COUNT(v.aid)
    FROM VOTES v
   WHERE DATE(FROM_UNIXTIME(v.timestamp)) BETWEEN DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY)
                                              AND CURRENT_DATE
GROUP BY DATE(FROM_UNIXTIME(v.timestamp))


  1. Provedení systémového příkazu z mysql

  2. Jak vytvořit databázi PostgreSQL

  3. Doctrine querybuilder DATE_FORMAT nefunguje

  4. sql pro nalezení nejnovějšího záznamu ve skupině