簡體   English   中英

通過自定義月份日期的MYSQL查詢組?

[英]MYSQL Query group by custom Month date?

我寫了一個查詢,返回月銷售額。

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號分組。 不確定如何將其分組!

因為您要處理時間“偏移”,所以必須在方程式中進行數學運算才能“偽造”。 就像是

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月,依此類推...

未經測試。

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

使其適應您的需求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM