sql >> Database >  >> RDS >> Mysql

Hoe een lege waarde te vullen als er die dag geen record is met behulp van MySQL-groep door

Je kunt een truc gebruiken om een ​​virtuele tabel met alle datums die je nodig hebt te genereren door een andere tabel (vervang aux met een willekeurige tabel in uw DB met ten minste 31 geregistreerd):

SELECT CONVERT(@d := DATE_ADD(@d, INTERVAL 1 DAY), DATE) AS `d`
FROM
    `aux`,
    (SELECT @d := DATE_SUB(CONVERT(DATE_FORMAT(NOW(), '%Y-%m-01'), DATETIME), INTERVAL 1 DAY)) `x`
WHERE
    @d < DATE_SUB(NOW(), INTERVAL 1 DAY)
LIMIT
    31

En schuif dan aan tafel aan:

SELECT
    `aux`.`d` as `Date`,
    SUM(IFNULL(`Clicks`, 0))AS `Clicks`,
    DAY(LAST_DAY(NOW())) AS `Monthdays`
FROM (
    SELECT CONVERT(@d := DATE_ADD(@d, INTERVAL 1 DAY), DATE) AS `d`
    FROM
        `aux`,
        (SELECT @d := DATE_SUB(CONVERT(DATE_FORMAT(NOW(), '%Y-%m-01'), DATETIME), INTERVAL 1 DAY)) `x`
    WHERE
        @d < DATE_SUB(NOW(), INTERVAL 1 DAY)
    LIMIT
        31
) aux
LEFT JOIN
    myTbl
    ON `Date` = `aux`.`d`
GROUP BY `aux`.`d`



  1. FOUT:SQLSTATE [HY000] [2002] Er kon geen verbinding worden gemaakt omdat de doelcomputer dit actief weigerde

  2. Rails:schrijf-/leesquery splitsen over master/slave-database

  3. Onbewerkte query uitvoeren op MySQL Loopback Connector

  4. Een tussenliggende MySQL- of MariaDB-master vervangen door een Binlog-server met MaxScale