Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak uzyskać daty grupowania rekordów na okres 3 dni w SQL?

Oto moje proponowane rozwiązanie:

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;

Pomysł polega na utworzeniu grup po 5 dni, a następnie przypisaniu rekordu do określonej grupy na podstawie podziału z 5. NoDays reprezentuje dni spędzone od MinDate do Flight_Date.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Różne sposoby porównywania schematów i danych tabel SQL Server

  2. Przechowywanie i pobieranie obrazów w bazie danych

  3. Wykonywanie zestawu zapytań SQL przy użyciu pliku wsadowego?

  4. Wywołanie API z procedury składowanej SQL Server

  5. Funkcje Lead() i LAG() w SQL Server 2008