2011-12-29 86 views
1

我写了一个查询来返回每月销售额。MYSQL查询组自定义月份日期?

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日-10th组。 不知道如何将它分组!

回答

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日+四月一日至10日,并从中减去“10日” ......这样的查询,他们会像3月1日至31日,4月11日至30日将出现像4月1日至20日+ 5月等每年的其余时间...

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 

使其适应您的需求。

相关问题