Tôi đang chạy vào một khối đường trên một vấn đề lớn hơn.Kiểm tra phạm vi thời gian chồng lên nhau, vấn đề về người gác [SQL]
Là một phần của truy vấn lớn, tôi cần giải quyết vấn đề "người gác đêm". Tôi có một bảng với sự thay đổi lịch trình như vậy:
ID | Start | End
1 | 2009-1-1 06:00 | 2009-1-1 14:00
2 | 2009-1-1 10:00 | 2009-1-1 18:00
3 | 2009-2-1 20:00 | 2009-2-2 04:00
4 | 2009-2-2 06:00 | 2009-2-2 14:00
Là một phần của một truy vấn, tôi cần phải xác định nếu có ít nhất 1 người gác trong một căn phòng bất cứ lúc nào cho một khoảng thời gian nhất định. Vì vậy, nếu tôi đã chỉ định phạm vi 2009-1-1 06:00
đến 2009-1-1 12:00
, kết quả là đúng, bởi vì ca 1 và 2 hợp nhất để bao gồm khoảng thời gian này - trên thực tế, bất kỳ số ca nào cũng có thể được xích để giữ đồng hồ. Tuy nhiên, nếu tôi đã kiểm tra 2009-2-1 22:00
đến 2009-1-2 10:00
, kết quả là sai vì có khoảng nghỉ giữa 4 và 6 giờ sáng sáng hôm sau.
Tôi muốn triển khai trong LINQ này hoặc dưới dạng hàm do người dùng xác định trong SQL Server (2005), vì cả hai trường hợp này chỉ là một phần của logic của truy vấn lớn hơn. xác định các yếu tố cần chú ý. Tập dữ liệu thực sự bao gồm khoảng một trăm bản ghi thay đổi giao nhau trong một khoảng thời gian nhất định, nhưng không phải lúc nào cũng bao trùm toàn bộ phạm vi.
Gần nhất tôi đã tìm thấy là How to group ranged values using SQL Server cho phạm vi số, tuy nhiên tùy thuộc vào từng phạm vi kết thúc ngay trước khi phạm vi tiếp theo bắt đầu. Nếu tôi có thể xây dựng cùng một cái nhìn thống nhất của đồng hồ, chỉ xem xét các đồng hồ chồng lên nhau, thì nó sẽ là tầm thường để kiểm tra xem một thời gian cụ thể có được bao phủ hay không. Một cái nhìn thống nhất sẽ trông như thế này:
Start | End
2009-1-1 06:00 | 2009-1-1 18:00
2009-2-1 20:00 | 2009-2-2 04:00
2009-2-2 06:00 | 2009-2-2 14:00
Lưu ý: toàn bộ điều này sẽ là tương đối dễ thực hiện bằng cách chỉ kéo tất cả các dữ liệu và chạy một số vòng tay vào nó, tuy nhiên đó là hệ thống hiện tại, và thay nó chậm vì số ca và số khoảng thời gian phải được kiểm tra.
Phạm vi ngày không nên trong "Vì vậy, nếu tôi đã chỉ định phạm vi 2009-1-1 12:00 đến 2009-1-1 06:00" được đảo ngược thành "2009-1-1 06:00 đến 2009-1-1 12:00 "? – Sung
@David Bạn có thể muốn tải xuống sách điện tử này: "Phát triển các ứng dụng cơ sở dữ liệu định hướng theo thời gian trong SQL" (http://www.cs.arizona.edu/people/rts/tdbbook.pdf). Nó có rất nhiều thông tin tốt về các truy vấn SQL phức tạp trên các bảng có phạm vi ngày. –
+1 - Tôi đang làm việc trên một vấn đề tương tự, xác định các điểm tách rời và chồng chéo – spencer7593