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

私はそれが毎月10日-10thのためのグループ、第一に代わり第一の

のようなカスタムの日付のためにグループにする必要がありたいと思います。 そのようにグループ化する方法がわからない!

答えて

1

あなたは時間 "シフト"を扱っているので、あなたはあなたの方程式でその数学を "偽り"する必要があります。クエリのため、彼らは次のようになります...月11-31 + 4月1-10、そこから「10日」を差し引い:

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月1日〜31日、4月11日〜30日は、毎年4月1日から20日までのように表示されます。

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 

ニーズに適合させるために、良いアイデアです。