[英]How to fill empty value when no record in that day using MySQL group by
SELECT `Date`, SUM(Clicks) AS Clicks, DAY(LAST_DAY(NOW())) AS Monthdays
FROM myTbl
WHERE ( DATE BETWEEN DATE_FORMAT(NOW(), '%Y-%m-01') AND NOW() )
AND MoverID = 123 GROUP BY `Date` ASC
我不想這樣使用PROCEDURE: http://stackoverflow.com/questions/7252460/mysql-group-by-and-fill-empty-rows
: http://stackoverflow.com/questions/7252460/mysql-group-by-and-fill-empty-rows
我不想創建一整天包含這樣的表: http://stackoverflow.com/questions/5988179/mysql-group-by-date-how-to-return-results-when-no-rows
: http://stackoverflow.com/questions/5988179/mysql-group-by-date-how-to-return-results-when-no-rows
我可以使用SELECT @@global.time_zone, @@session.time_zone;
在PHP中,在MySQL查詢結果出來之后,我將PHP設置為與MySQL相同的時區,並用PHP填寫日期。 但這是我可以用MySQL方式完成的方式嗎?
您可以使用技巧來生成虛擬表,該虛擬表將您需要的所有日期與另一個表一起使用(將aux
替換為數據庫中的任何表,其中至少有31列被重新記錄):
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
然后加入您的表格:
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`
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.