mysq 按天,月,年统计

2020-03-14  本文已影响0人  打不死的小强8号

t_member和t_order是业务表,根据自己得需求创建

近7天统计 (天数6可以修改)

SELECT tbl.temp_date AS temp_date,
        IFNULL(tbr.totalnum, 0) AS total_num
        FROM
        (SELECT @s :=@s + 1 AS _index, DATE(DATE_SUB(CURRENT_DATE, INTERVAL @s DAY)) AS temp_date
        FROM
        mysql.help_topic h
        INNER JOIN
        (SELECT @s := - 1) temp  WHERE @s < 6  ORDER BY temp_date) AS tbl
        LEFT JOIN (SELECT count(member_id) AS totalnum, DATE(create_time) createtime
        FROM t_member GROUP BY createtime ) AS tbr ON tbl.temp_date = tbr.createtime
        GROUP BY tbl.temp_date;

某月统计(日期传某月的第一天)

SELECT tbl.temp_date AS temp_date,
        IFNULL(tbm.totalnum, 0) AS total_num,
        IFNULL(tbr.carWashCount, 0) AS carWashCount,
        IFNULL(tbr.income, 0) AS income
        FROM
        (SELECT @s :=@s + 1 AS _index, DATE(DATE_ADD("2019-11-1", INTERVAL @s DAY)) AS temp_date
        FROM
        mysql.help_topic h
        INNER JOIN
        (SELECT @s := - 1) temp  WHERE @s < (DAY(LAST_DAY("2019-11-1"))-1) ORDER BY temp_date) AS tbl
        LEFT JOIN (SELECT COUNT(order_id) AS carWashCount,SUM(payment_price) AS income, DATE(create_time) createtime
        FROM t_order
        GROUP BY createtime ) AS tbr ON tbl.temp_date = tbr.createtime
        LEFT JOIN (SELECT COUNT(member_id) AS totalnum, DATE(create_time) createtime
        FROM t_member GROUP BY createtime ) AS tbm ON tbl.temp_date = tbm.createtime
        GROUP BY tbl.temp_date;

某年统计(查询某一年的,日期传某年某月第一天日期(如:2019-01-01)

SELECT tbl.temp_date AS temp_date,
        IFNULL(tbm.totalnum, 0) AS total_num,
        IFNULL(tbr.carWashCount, 0) AS carWashCount,
        IFNULL(tbr.income, 0) AS income
        FROM
        (SELECT @s :=@s + 1 AS _index,  EXTRACT(YEAR_MONTH FROM DATE_ADD("2019-01-01", INTERVAL @s MONTH)) AS temp_date
        FROM
        mysql.help_topic h
        INNER JOIN
        (SELECT @s := -1) temp  WHERE @s < 11 ORDER BY temp_date) AS tbl
        LEFT JOIN (SELECT COUNT(order_id) AS carWashCount,SUM(payment_price) AS income, EXTRACT(YEAR_MONTH FROM create_time) createtime
        FROM t_order GROUP BY createtime ) AS tbr ON tbl.temp_date = tbr.createtime
        LEFT JOIN (SELECT COUNT(member_id) AS totalnum, EXTRACT(YEAR_MONTH FROM create_time) createtime
        FROM t_member GROUP BY createtime ) AS tbm ON tbl.temp_date = tbm.createtime
        GROUP BY tbl.temp_date;
上一篇 下一篇

猜你喜欢

热点阅读