Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Làm cách nào để lấy các ngày nhóm bản ghi trong khoảng thời gian 3 ngày trong SQL?

Đây là giải pháp được đề xuất của tôi:

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;

Ý tưởng là tạo các nhóm gồm 5 ngày, sau đó liên kết bản ghi với một nhóm cụ thể dựa trên sự phân chia với 5. NoDays đại diện cho số ngày dành từ MinDate đến 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. SQL - Chọn bản ghi mới nhất khi có bản sao

  2. CHÈN nhiều bản ghi bằng SQL Server 2008

  3. Câu hỏi về thủ tục được lưu trữ đơn giản

  4. Hiệu suất kém của truy vấn SQL do mệnh đề ORDER BY

  5. Lý do nên nâng cấp lên SQL Server 2017