【问题标题】:Can't query more than 30 days不能查询超过 30 天
【发布时间】:2018-06-11 20:51:18
【问题描述】:

我有以下 MySQL 查询:

SELECT
CONVERT_TZ(date1, '+0:00', '-7:00') as date,
sum(base_subtotal) as `base_subtotal`
FROM sales
WHERE date1 > (NOW() - interval 90 DAY)
GROUP BY DAY(date)
ORDER BY date DESC; 

尽管提取了 90 天的数据,但 MySQL 仅返回任何特定日期间隔的 30 天尾部。因此,如果今天是 6 月 11 日,并且我使用 "interval 30 day" 命令拉取请求,我将获得从现在到 30 天前的所有日期。但是,如果我对 60 天命令执行相同操作,我会得到 30 天前的日期 STARTING 在一个月前,换句话说,我会得到 4 月 14 日到 5 月 11 日之间的日期,但奇怪的是 5 月 31 日。

每天的总数也开始变大,当我只运行特定月份的代码来验证总数时,假设我使用命令 "HERE Date(date1) BETWEEN '2018-05-01' AND '2018-05-31'" 我得到不同的值。

我做错了什么?我读了一些关于 Java 中“溢出”错误的内容,但不确定这是怎么回事。我只想查看过去 90 天每天的总销售额。

【问题讨论】:

  • 尝试将您的问题减少到minimal reproducible example。通常通过这样做,您会自己找出问题所在。
  • dev.mysql.com/doc/refman/5.7/en/… 获取每个日期的总数,GROUP BY DATE(CONVERT_TZ(date1, '+0:00', '-7:00'))
  • 巴尔玛说了什么;但要详细说明,您不仅获得了“30 天尾巴”,还获得了这 90 天中每月每一天(1-31)的总数,以及有效随机选择的“日期”值一个月中的哪一天。

标签: mysql sql


【解决方案1】:

问题可以在这一行看到:

GROUP BY DAY(date)

由于 day 不能小于 1 或大于 31 并且相同,因此如果您想获得更多结果,则需要按日期分组。

【讨论】:

    【解决方案2】:

    DAY(date) 只是一个月中的某一天。因此,当您按此分组时,不同月份同一天的结果将被分组在一起。你应该改用GROUP BY DATE(date)

    【讨论】:

      【解决方案3】:

      您的 group by 仅在一个月中的某一天(即 1 日、2 日、3 日... 31 日)进行,并将它们组合在一起。如果您将“按天(日期)分组”更改为“按日期分组”,它应该可以工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-31
        • 2011-05-20
        • 1970-01-01
        • 2022-11-02
        • 2014-03-02
        相关资源
        最近更新 更多