我有以下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个月之前获得一个月前开始的日期,换句话说,我会在4月14日到5月11日之间得到日期,但奇怪的是也是5月31日。
每天的总和也开始变大,当我运行特定月份的代码来验证总数时,我说使用命令"HERE Date(date1) BETWEEN '2018-05-01' AND '2018-05-31'"
我会得到不同的值。
我做错了什么?我读了一些关于Java中“溢出”错误的内容,但不确定这是发生了什么。我只是想看看过去90天每天的销售总数。
答案 0 :(得分:6)
问题可以在这一行看到:
GROUP BY DAY(date)
由于日期不能小于1或大于31且相同,如果您想获得更多结果,则需要按日期分组。
答案 1 :(得分:4)
DAY(date)
就是这个月的某一天。因此,当您按此分组时,不同月份同一天的结果将组合在一起。您应该使用GROUP BY DATE(date)
代替。
答案 2 :(得分:1)
您的小组仅在该月的某一天(即第1天,第2天,第3天......第31天)进行此操作并将这些日期分组。如果您将“按日分组(日期)”更改为“按日期分组”,则应该可以正常工作。