統計近7天每天,近一個月每天,近三個月每天,近一年每個月的新增數量,用於畫折線圖,由於是根據create_time字段統計的,所以如果有一天沒有新增,就會缺少這一天的日期,要對日期進行補充,當天沒有新增的new_count置為0,所以要建立一個日期表calendar
1、查詢單表account,近7天每天新增的數量
SELECT
IFNULL(COUNT(a.create_time), 0) AS new_count,
DATE_FORMAT(c.datelist, '%Y-%m-%d') AS show_time
FROM
account a
RIGHT JOIN calendar c ON DATE_FORMAT(c.datelist, '%Y-%m-%d') = DATE_FORMAT(a.create_time, '%Y-%m-%d') WHERE c.datelist < CURDATE()
AND c.datelist >= DATE_SUB(CURDATE(), INTERVAL 7 DAY)
GROUP BY
show_time
ORDER BY
show_time ASC;
2、查詢單表account近一個月每天、近三個月每天的數據量寫法同上
3、查詢近一年每個月的數據量
SELECT
IFNULL(count(a.create_time), 0) AS new_count,
DATE_FORMAT(c.datelist, '%Y-%m') AS show_time
FROM
account a
RIGHT JOIN calendar c ON DATE_FORMAT(c.datelist, '%Y-%m-%d') = DATE_FORMAT(a.create_time, '%Y-%m-%d')
WHERE
c.datelist < CURDATE()
AND c.datelist >= DATE_SUB(CURDATE(), INTERVAL 1 YEAR)
GROUP BY
show_time
ORDER BY
show_time ASC;
4、查詢近7天,account表字段為reward符合日期查詢條件的total reward
SELECT
IFNULL(SUM(reward), 0) AS reward,
DATE_FORMAT(c.datelist, '%Y-%m-%d') AS show_time
FROM
account a
RIGHT JOIN calendar c ON DATE_FORMAT(c.datelist, '%Y-%m-%d') = DATE_FORMAT(a.create_time, '%Y-%m-%d')
WHERE
c.datelist < CURDATE()
AND c.datelist >= DATE_SUB(CURDATE(), INTERVAL 7 DAY)
GROUP BY
show_time
ORDER BY
show_time ASC;
(查詢近一個月每天,近三個月每天的total reward同上)
5、查詢近一年每個月的total reward
SELECT
IFNULL(SUM(reward), 0) AS reward,
DATE_FORMAT(c.datelist, '%Y-%m') AS show_time
FROM
account a
RIGHT JOIN calendar c ON DATE_FORMAT(c.datelist, '%Y-%m-%d') = DATE_FORMAT(a.create_time, '%Y-%m-%d')
WHERE
c.datelist < CURDATE()
AND c.datelist >= DATE_SUB(CURDATE(), INTERVAL 1 YEAR)
GROUP BY
show_time
ORDER BY
show_time ASC;
————————————————
版權聲明:本文為CSDN博主「YJ2」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/y_1111/article/details/78971291