Comment get les dates de regroupement des loggings pour une période de 3 jours en SQL?

Il devient difficile de regrouper et d'afficher des loggings tous les 5 jours.

Voici mes données:

FLIGHT_DATE LANDINGS PILOTID COPILOTNAME MONT DPT 11/16/2013 1 AB 11 5.5 11/17/2013 1 AB 11 13 11/19/2013 1 AB 11 12.55 11/19/2013 1 AB 11 4 11/21/2013 1 AB 12 6 11/24/2013 1 AB 12 6.03 11/25/2013 1 AB 11 5.5 11/26/2013 1 AB 11 13 11/26/2013 1 AB 11 12.55 11/30/2013 1 AB 11 4 12/1/2013 1 AB 12 6 12/2/2013 1 AB 12 6.03 

Je veux le montrer comme ci-dessous:

 Week Start Week End DPT 11/17/2013 11/21/2013 35.55 11/22/2013 11/26/2013 37.08 11/27/2013 12/1/2013 6 12/2/2013 12/6/2013 6.03 

Voici ma solution proposée:

 DECLARE @MinDate AS DATETIME = (SELECT MIN(flight_date) FROM flights); WITH cte AS ( SELECT flight_date, DATEDIFF(DAY, @MinDate, flight_date) AS NoDays, DATEDIFF(DAY, @MinDate, flight_date)/5 AS NoGroup, DPT FROM flights ) SELECT DATEADD(DAY, NoGroup*5, @MinDate) AS [Week Start], DATEADD(DAY, NoGroup*5+4, @MinDate) AS [Weed End], SUM(DPT) FROM cte GROUP BY NoGroup; 

L'idée est de former des groupes de 5 jours, puis d'associer un logging à un groupe spécifique basé sur la division avec 5. NoDays représente les jours passés de MinDate à Flight_Date.

Vous pouvez utiliser cette requête. Vous devez spécifier la date de début à partir de laquelle vous voulez countr et le nombre de jours dans chaque période (ce qui semble être 5 dans votre cas), mais s'il vous plaît ajuster ces numéros au besoin.

 declare @startdate date = '20131117' declare @interval int = 5 select dateadd(dd, @interval * (o.number - 1), @startdate) WeekStart, dateadd(dd, @interval * o.number - 1, @startdate) WeekEnd, sum(d.DPT) DPT from yourtable d inner join (select ROW_NUMBER() over (order by object_id) as number from sys.all_objects) as o on d.FLIGHT_DATE >= dateadd(dd, @interval * (o.number - 1), @startdate) and d.FLIGHT_DATE < dateadd(dd, @interval * o.number, @startdate) group by o.number order by dateadd(dd, @interval * (o.number - 1), @startdate)