J'ai une table 'Événements':
date | count -----------+------- 2020-01-01 | 1 2020-01-02 | 2 2020-01-03 | 2 2020-01-04 | 1 2020-01-05 | 1
3 Réponses :
Un CTE récursif est pratique ici (si vous n'avez pas de table de numéros ni de table de calendrier).
with cte as (
select id, name, date_start, date_end
from t
union all
select id, name, dateadd(day, 1, date_start), date_end
from t
where date_start < date_end
)
select date_start as date, count(*)
from cte
group by date_start
order by date_start;
Merci c'est exactement ce dont j'ai besoin
Vous pouvez utiliser recrutement CTE code>:
Ceci est généralement fait avec Calendrier Talbe. Voir Échantillons de données ci-dessous et la requête:
declare @tbl table (id int, name varchar(20), date_start date, date_end date)
insert into @tbl values
( 1 , 'aaa' , '2020-01-01' , '2020-01-03'),
( 2 , 'bbb' , '2020-01-02' , '2020-01-05');
-- set boundaries for calendar
declare @startDate date, @endDate date;
select @startDate = min(date_start), @endDate = max(date_end) from @tbl;
;with calendar as (
select @startDate dates
union all
select dateadd(day, 1, dates) from calendar
where dates < @endDate
)
select c.dates, count(*) from calendar c
join @tbl t on c.dates between t.date_start and t.date_end
group by c.dates
Qu'avez-vous essayé? Avez-vous consulté la fonction
compteur code>? Pourquoi pensez-vous que ne serait pas i> travailler pour ce que vous êtes après?