Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment obtenir les enregistrements regroupant les dates sur une période de 3 jours en SQL ?

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 enregistrement à un groupe spécifique basé sur la division par 5. NoDays représente les jours passés de MinDate à Flight_Date.