2011-12-29 85 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 

使其適應您的需求。

相關問題