Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menggabungkan Selang Tarikh Bertindih dengan Cekap?

Bagaimana untuk Menggabungkan Selang Tarikh Bertindih dengan Cekap?

DDD
DDDasal
2024-12-30 06:56:101022semak imbas

How to Efficiently Merge Overlapping Date Intervals?

Menggabungkan Selang Tarikh Bertindih (Penyelesaian Diperbaiki)

Menggabungkan selang tarikh bertindih ialah tugas biasa dalam pemprosesan data. Walaupun penyelesaian yang disediakan adalah mudah, ia mungkin bukan yang paling cekap atau komprehensif. Berikut ialah penyelesaian yang dipertingkatkan yang menangani kemungkinan kes kelebihan:

-- Retrieve the overlapping ranges
SELECT 
       s1.StartDate,
       MIN(t1.EndDate) AS EndDate
FROM @T s1 
INNER JOIN @T t1 ON s1.StartDate <= t1.EndDate
  AND NOT EXISTS(SELECT * FROM @T t2 
                 WHERE t1.EndDate >= t2.StartDate AND t1.EndDate < t2.EndDate) 
GROUP BY s1.StartDate 

-- Exclude subintervals
EXCEPT

-- Find overlapping intervals with extended end dates
SELECT 
       s1.StartDate,
       MAX(t1.EndDate) AS EndDate
FROM @T s1 
INNER JOIN @T t1 ON s1.StartDate > t1.StartDate AND s1.StartDate <= t1.EndDate
GROUP BY s1.StartDate

Pertanyaan ini mengambil kira kes di mana pertindihan mungkin melangkaui julat asal. Klausa EXCEPT menapis julat lanjutan ini, menghasilkan set selang gabungan yang lebih tepat dan lengkap.

Output:

StartDate  | EndDate
2010-01-01 | 2010-06-13
2010-06-15 | 2010-08-16
2010-11-01 | 2010-12-31

Atas ialah kandungan terperinci Bagaimana untuk Menggabungkan Selang Tarikh Bertindih dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn