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?