Gabung Selang Tarikh Bertindih
Masalah:
Bolehkah proses penggabungan selang tarikh bertindih jadilah dipertingkatkan?
Perbincangan:
Penyelesaian yang dibentangkan dalam siaran asal adalah mudah, tetapi mungkin terdapat kaedah yang lebih cekap.
Penyelesaian:
Satu penyelesaian alternatif mendapat inspirasi daripada siaran "Gabungkan masa tarikh bertindih untuk kembali rekod julat bertindih tunggal."
Penyelesaian ini menggunakan subkueri untuk mengenal pasti tarikh tamat maksimum dalam setiap selang dan kemudian melakukan operasi cantum sendiri untuk menggabungkan selang bertindih:
SELECT s1.StartDate, --t1.EndDate 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
Keputusan:
Menggunakan penyelesaian ini, keputusan berikut adalah diperolehi:
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 |
Atas ialah kandungan terperinci Bolehkah Penggabungan Selang Tarikh Bertindih Dioptimumkan untuk Kecekapan yang Lebih Besar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!