【问题标题】:Mysql query to get count for the last 6 months including with the count 0Mysql查询以获取过去6个月的计数,包括计数0
【发布时间】:2014-11-30 12:49:41
【问题描述】:

我需要获取一个列表,其中包含过去 6 个月中每月的计数人数, 如何强制查询给我 count = 0 的月份?像这样:

table A 
-----------------------------
id |    name    |  created   | 
-----------------------------
1  |    mark    |'2014-10-01'|
2  |    peter   |'2014-10-02'|
3  |    Roger   |'2014-10-03'|
4  |    John    |'2014-09-02'|
5  |    moyes   |'2014-09-03'|
6  |    david   |'2014-08-04'|

我需要得到的结果:

  ----------------------------
  MONTHS  |  YEARS  | TOTAL  |
  ----------------------------
  January |  2015   |  0     |
  December|  2014   |  0     |
  November|  2014   |  0     |
  October |  2014   |  3     |
 September|  2014   |  2     |
  August  |  2014   |  1     |

到目前为止我尝试过的查询: http://sqlfiddle.com/#!2/ef54ce/6

【问题讨论】:

  • 但是你只有三个月的时间。剩下的几个月你要去哪里?没有十二月,也没有七月。为什么你认为它必须在这几个月回归?
  • 您无法选择数据库中不存在的数据。你必须以某种方式模拟它。
  • 过去 6 个月内 2015 年 1 月如何?
  • @GordonLinoff 我刚刚确定了日期(2015-01-20),所以最近 6 个月(2014 年 8 月、2014 年 9 月、2014 年 10 月、2014 年 11 月、2014 年 12 月、2015 年 1 月)
  • 之后你对结果集做了什么?

标签: mysql sql


【解决方案1】:

也许,您必须提供包含初始数据报告的虚拟表。 然后,与实际数据联合。为避免重复数据,您需要使用聚合

SELECT
    m, y, MAX(v) v
FROM
    (
        SELECT 
            DATE_FORMAT('2014-01-01', '%M') as m,
            DATE_FORMAT('2014-01-01', '%Y') as y,
            0 as v
        UNION

        SELECT 
            DATE_FORMAT('2014-02-01', '%M') as m,
            DATE_FORMAT('2014-02-01', '%Y') as y,
            0 as v
        UNION

        .... until December ...

        UNION
        SELECT 
            DATE_FORMAT(created, '%M') as m,
            DATE_FORMAT(created, '%Y') as y,
            COUNT(1) as v
        FROM your_table
        GROUP BY DATE_FORMAT(created, '%Y-%M')
    ) t
GROUP BY y, m
... adjust result ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2020-05-29
    • 1970-01-01
    相关资源
    最近更新 更多