sql >> Database >  >> RDS >> Sqlserver

Hoe krijg je de records die data groeperen voor een periode van 3 dagen in SQL?

Hier is mijn voorgestelde oplossing:

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;

Het idee is om groepen van 5 dagen te vormen en vervolgens een record te koppelen aan een specifieke groep op basis van een verdeling met 5. NoDays staat voor de dagen die zijn doorgebracht van MinDate tot Flight_Date.



  1. MySQL Group By om het laatste resultaat weer te geven

  2. Deel 1 – SuiteCRM installeren en de database reverse engineeren?

  3. De eerste 10 ongebruikte manual_sequence-nummers verkrijgen

  4. Verhoog rijnummer op groep met herhaalde groepen