【问题标题】:Getting non-existant month/week/year when using MySql group by clause with month/week/year date functions使用带有月/周/年日期函数的 MySql group by 子句时获取不存在的月/周/年
【发布时间】:2009-04-14 14:07:23
【问题描述】:

我正在尝试实现一个查询,其中我使用聚合来汇总某些值,然后按 mysql 日期函数(月 | 年 | 周)分组。出于明显的原因,这些 group by 子句不会分别返回不存在的月或年或周。我想知道是否有办法获得它们?

【问题讨论】:

    标签: mysql datetime group-by


    【解决方案1】:

    您需要创建一个虚拟表:

    CREATE TABLE t_dummy (num int PRIMARY KEY);
    

    ,填写并在OUTER JOIN中使用:

    SELECT  @start + INTERVAL num DAY, SUM(mytable.value)
    FROM    t_dummy
    LEFT JOIN
            mytable
    ON      mytable.datetime >= @start + INTERVAL num DAY
            AND mytable.datetime < @start + INTERVAL num + 1 DAY
    WHERE   t_dummy.num BETWEEN @start and @start + @days
    

    您需要在虚拟表中包含与报告涵盖的天数一样多的后续 NUM

    很遗憾,MySQL does not have a built-in row generator

    【讨论】:

      【解决方案2】:

      解决方案是否必须完全在 MySQL 中?如果它是对 Web 应用程序的查询,那么我将编写 Web 应用程序代码以查找丢失的行并将它们插入到输出数据中。

      【讨论】:

        猜你喜欢
        • 2018-06-15
        • 1970-01-01
        • 2010-10-05
        • 2019-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-30
        相关资源
        最近更新 更多