Bắt đầu ngayBắt đầu miễn phí

Tính số ngày trôi qua giữa các sự cố

Có thể bạn đã để ý trong hai bài tập trước là không phải ngày nào trong tuần cũng có sự cố, nên gọi LAG()LEAD() là "ngày trước đó" hơi sai; thực ra là "kỳ trước". Ban quản lý cũng nhận ra điều này và vào cuối tháng 7 muốn biết số ngày giữa các sự cố. Để làm được, chúng ta sẽ tính hai giá trị: số ngày kể từ sự cố trước và số ngày cho đến sự cố tiếp theo.

Hãy nhớ rằng DATEDIFF() cho biết chênh lệch giữa hai ngày. Ta có thể kết hợp hàm này với LAG()LEAD() để lấy kết quả.

Bài tập này là một phần của khóa học

Phân tích chuỗi thời gian trong SQL Server

Xem khóa học

Hướng dẫn bài tập

  • Tính số ngày kể từ sự cố gần nhất trước đó bằng cách kết hợp DATEDIFF() với LAG() hoặc LEAD().
  • Tính số ngày cho đến sự cố tiếp theo bằng cách kết hợp DATEDIFF() với LAG() hoặc LEAD().
  • LƯU Ý: bạn sẽ không cần dùng cột NumberOfIncidents trong bài tập này.

Bài tập tương tác thực hành trực tiếp

Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.

SELECT
	ir.IncidentDate,
	ir.IncidentTypeID,
    -- Fill in the days since last incident
	___(DAY, ___(ir.IncidentDate, 1) OVER (
		PARTITION BY ir.IncidentTypeID
		ORDER BY ir.IncidentDate
	), ir.___) AS DaysSinceLastIncident,
    -- Fill in the days until next incident
	___(DAY, ir.___, ___(ir.IncidentDate, 1) OVER (
		PARTITION BY ir.IncidentTypeID
		ORDER BY ir.IncidentDate
	)) AS DaysUntilNextIncident
FROM dbo.IncidentRollup ir
WHERE
	ir.IncidentDate >= '2019-07-02'
	AND ir.IncidentDate <= '2019-07-31'
	AND ir.IncidentTypeID IN (1, 2)
ORDER BY
	ir.IncidentTypeID,
	ir.IncidentDate;
Chỉnh sửa và Chạy Mã