Menggabungkan Selang Tarikh Bertindih: Pendekatan Cekap
Tugas untuk menggabungkan selang tarikh bertindih sering timbul dalam pelbagai konteks. Satu pendekatan biasa untuk menangani masalah ini melibatkan pengemaskinian selang secara berulang sehingga tiada lagi pertindihan wujud. Walaupun kaedah ini agak mudah, ia menimbulkan persoalan sama ada alternatif yang lebih cekap wujud.
Pendekatan Alternatif:
Pendekatan alternatif untuk menggabungkan selang tarikh bertindih telah dicadangkan oleh pengguna dalam urutan forum berkaitan. Kaedah ini memanfaatkan gabungan gabungan dan logik bersyarat untuk mencapai hasil yang diingini.
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) WHERE NOT EXISTS(SELECT * FROM @T s2 WHERE s1.StartDate > s2.StartDate AND s1.StartDate <= s2.EndDate) GROUP BY s1.StartDate ORDER BY s1.StartDate
Penjelasan:
Pendekatan ini berfungsi seperti berikut:
Faedah:
Contoh:
Menggunakan data contoh yang sama yang disediakan dalam soalan asal, keputusan berikut diperoleh:
StartDate | EndDate |
---|---|
2010-01-01 | 2010-06-13 |
2010-06-15 | 2010-06-25 |
2010-06-26 | 2010-08-16 |
2010-11-01 | 2010-12-31 |
Kesimpulan:
Pendekatan alternatif yang dibentangkan menawarkan cara yang cekap untuk menggabungkan tarikh bertindih selang waktu. Ia memanfaatkan gabungan gabungan dan logik bersyarat untuk mencapai hasil yang diingini, memberikan alternatif yang berdaya maju kepada pendekatan berulang.
Atas ialah kandungan terperinci Bagaimanakah Kita Boleh Menggabungkan Selang Tarikh Bertindih dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!