我写了一个返回月度销售额的查询。
SELECT
count(O.orderid) as Number_of_Orders,
concat (MonthName(FROM_UNIXTIME(O.`date`)),' - ',year(FROM_UNIXTIME(O.date))) as Ordered_Month,
sum(O.total) as TotalAmount,
Month(FROM_UNIXTIME(O.`date`)) as Month_of_Year,
year(FROM_UNIXTIME(O.date)) as Sale_Year
FROM orders O
group by Month_of_Year, Sale_Year
order by Sale_Year DESC,Month_of_Year DESC
我想将其设为像
这样的自定义日期而不是第1到第1,它应该分组为每个月的10日-10。 不知道怎么这样分组!
答案 0 :(得分:1)
因为你正在处理时间的“转变”,所以你必须在你的等式中进行数学计算以“假装”。像
这样的东西SELECT
count(O.orderid) as Number_of_Orders,
concat(
MonthName( Date_Sub( FROM_UNIXTIME(O.`date`), INTERVAL 10 DAY )),
' - ',
Year( Date_Sub( FROM_UNIXTIME(O.date), INTERVAL 10 DAY) )
) as Ordered_Month,
sum(O.total) as TotalAmount,
Month( Date_Sub( FROM_UNIXTIME(O.`date`), INTERVAL 10 DAY )) as Month_of_Year,
Year( Date_Sub( FROM_UNIXTIME(O.date), INTERVAL 10 DAY )) as Sale_Year
FROM
orders O
group by
Month_of_Year,
Sale_Year
order by
Sale_Year DESC,
Month_of_Year DESC
所以,从本质上讲,你正在考虑日期:3月11日至31日+ 4月1 - 10日,并从它们中减去“10天”......所以对于查询,它们看起来像3月1日到31日, 4月11日至30日将出现在4月1日至20日+ 5月等每年剩余的时间......
答案 1 :(得分:0)
未经测试。
group by Month_of_Year, ceil(day(o.`date`)/10), Sale_Year
这是一个更好的主意,以避免有4组但只有3个
select
month(my_date) as your_month,
year(my_date) as your_year,
case
when day(my_date) <= 10 then 1
when day(my_date) between 11 and 20 then 2
else 3 end as decade,
count(*) as total
from table
group by
your_month,your_year,decade
根据您的需要进行调整。