-1
votes

Comptez les lignes pour chaque jour entre deux colonnes de date SQL Server

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


1 commentaires

Qu'avez-vous essayé? Avez-vous consulté la fonction compteur ? Pourquoi pensez-vous que ne serait pas travailler pour ce que vous êtes après?


3 Réponses :


0
votes

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;


1 commentaires

Merci c'est exactement ce dont j'ai besoin



1
votes

Vous pouvez utiliser recrutement CTE : xxx


0 commentaires

0
votes

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


0 commentaires