【问题标题】:Selecting distinct months and years and then breakdown of values for选择不同的月份和年份,然后分解为
【发布时间】:2011-01-14 20:24:08
【问题描述】:

我正在使用 Open Flash Chart 来创建统计数据,我需要做的事情之一就是生成一个堆积条形图。

从逻辑上讲,我需要能够对所有不同的月/年组合、2009 年 12 月、2010 年 1 月、2010 年 2 月等进行分组,然后从该组中对所有不同的行进行分组,即访问者进行的不同类型的查询(通过网站,通过电子邮件,通过电话)

目前表格属性如下所示:

id (int, 自增) date_time(日期时间格式) 类型(枚举、访问、网站、电话、电子邮件)

有什么建议吗?我已经尝试了几件事,但运气不佳。

【问题讨论】:

    标签: php sql mysql database datatable


    【解决方案1】:

    这样的事情应该可以工作:

    select count(*), type, YEAR(date_time), MONTH(date_time) from `table` 
    group by type, YEAR(date_time), MONTH(date_time)
    

    【讨论】:

      【解决方案2】:
      SELECT  EXTRACT(YEAR_MONTH FROM date_time) AS ym, type, COUNT(*)
      FROM    mytable
      GROUP BY
              ym, type
      

      【讨论】:

      • 酷,不知道extract(year_month ...)
      【解决方案3】:

      您可以创建一个带有月份字段的表格,并为您感兴趣的月份填充它,例如:

      StartOfMonth
      2010-01-01
      2010-02-01
      2010-03-01
      ...
      

      然后您可以使用left join 对所有月份进行分组:

      select     
          year(mt.StartOfMonth)
      ,   month(mt.StartOfMonth)
      ,   e.type
      ,   count(*)
      from       MonthTable mt
      left join  Enquiries e
      on         mt.StartOfMonth <= e.EnquiryDate
                 and e.EnquiryDate < mt.StartOfMonth + interval 1 month
      where      mt.StartOfMonth <= NOW()
      group by   year(mt.StartOfMonth), month(mt.StartOfMonth), e.type
      

      【讨论】:

        【解决方案4】:

        要按年和月分组,sql 可以如下所示:

        SELECT DATE_FORMAT(date_time, '%Y-%m') AS yearmonth, 
               COUNT(*) AS count_month
        FROM table_name 
        GROUP BY yearmonth
        

        【讨论】:

          猜你喜欢
          • 2012-01-08
          • 2011-03-21
          • 1970-01-01
          • 2010-10-15
          • 2017-05-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多