2017-02-24 172 views
0

我有一個表是這樣的:累積值在MySQL

Tournament Name  Start    End 
Chess A    2016-12-14  2017-01-31 
Football B   2016-08-01  2017-02-15 
.... 

我需要創建一個表,會告訴我每月正在進行比賽的數量。例如:

Month-Year Number of ongoing Tournaments 
01-2016   2 
02-2016   3 
... 
12-2016   4 

有什麼建議嗎? 感謝

回答

1

可以生成月份列表,然後使用join或相關子查詢:

select date_format(month_start, '%Y-%m') as yyyymm, 
     (select count(*) 
     from tournaments t 
     where t.start <= m.month_start and 
       t.end >= m.month_start + interval 1 month 
     ) as ongoing 
from (select date('2016-01-01') as month_start union all 
     select date('2016-02-01') as month_start 
    ) m; 

注:這只是計數的比賽是適用於整個月。如果您希望部分月份錦標賽進行計數,您可以調整where條款。

+0

但是,如果我需要從2016-01-01開始的所有月份,我需要寫下類似於(select date('2016-01-01')as month_start union all select date('2016-02-01 ')作爲MONTH_START UNION ALL 選擇日期(' 2016年3月1日 ')爲MONTH_START UNION ALL ... 選擇日期(' 2016年12月1' 日)爲MONTH_START )M 吧? –

+0

@JoseCabreraZuniga。 。 。是。您可以將所需的月份添加到「m」。 –