我有一张跨越几年的事件表。
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
答案 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;