每年统计运行事件总数,其范围为多年

时间:2019-06-28 02:53:49

标签: mysql sql

我有一张跨越几年的事件表。

title     start_year  end_year 
Event 1   1976        1983
Event 2   1977        2002
Event 3   2018        2019
Event 4   2003        2019

所需结果:

我想输出过去50年中每年“运行中”事件的总数。 (在1976年,只有一个事件正在运行。在1977年,同一事件还在运行,另外还有一个事件。)

year   total_events 
1976   1
1977   2
1976   2

示例查询:

此查询返回一年的总数。在过去的50年中,最好的方法是什么来输出结果?

SELECT COUNT(*) AS total_events
FROM `events`
WHERE start_year <= 1976
AND end_year >= 1976

1 个答案:

答案 0 :(得分:2)

基本上,您需要一个年份列表。如果没有人可以在派生表中创建一个列表:

select y.year,
       (select count(*)
        from t
        where y.year between t.start_year and t.end_year
       ) as num_events
from (select 1976 as year union all
      select 1977 as year union all
      select 1978 as year union all
      . . .
     ) y;