Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengira Perbezaan Masa Antara Baris Berturut-turut dalam Jadual?
Cara Mengira Perbezaan Masa dalam Dua Baris Jadual Berturut-turut
Dalam jadual dengan lajur yang dipanggil "StartDate," selalunya perlu untuk menentukan perbezaan masa antara rekod bersebelahan. Seorang pengguna baru-baru ini menghadapi isu ini semasa bekerja dengan jadual requestId dan tarikh mula dan mendapatkan bantuan.
Jadual yang disediakan oleh pengguna mengandungi data seperti berikut:
requestId | startdate |
---|---|
1 | 2011-10-16 13:15:56 |
2 | 2011-10-16 13:15:59 |
3 | 2011-10-16 13:15:59 |
4 | 2011-10-16 13:16:02 |
5 | 2011-10-16 13:18:07 |
Objektif pengguna adalah untuk mengira perbezaan masa antara setiap pasangan baris bersebelahan (cth., requestId 1 dan 2, 2 dan 3, dsb.). Mereka menyedari keperluan untuk cantuman sendiri tetapi bergelut untuk menulis klausa ON yang sesuai.
Penyelesaian yang disediakan memanfaatkan JOIN DALAM antara dua kejadian jadual yang sama (disebut sebagai A dan B). Klausa ON menyatakan bahawa requestId dalam baris B hendaklah sama dengan requestId dalam baris A tambah satu:
SELECT A.requestid, A.starttime, (B.starttime - A.starttime) AS timedifference FROM MyTable A INNER JOIN MyTable B ON B.requestid = (A.requestid + 1) ORDER BY A.requestid ASC
Pertanyaan ini berjaya mengira dan mengembalikan perbezaan masa yang diminta antara baris berturut-turut. Walau bagaimanapun, jika requestId tidak berturut-turut, pendekatan alternatif diperlukan:
SELECT A.requestid, A.starttime, (B.starttime - A.starttime) AS timedifference FROM MyTable A CROSS JOIN MyTable B WHERE B.requestid IN (SELECT MIN (C.requestid) FROM MyTable C WHERE C.requestid > A.requestid) ORDER BY A.requestid ASC
Dalam pertanyaan yang diubah suai ini, CROSS JOIN digunakan untuk memadankan setiap baris dengan setiap baris lain dalam jadual. Subquery kemudian memilih requestId minimum yang lebih besar daripada requestId yang dipilih semasa, memastikan bahawa hanya baris berturut-turut dibandingkan.
Atas ialah kandungan terperinci Bagaimana untuk Mengira Perbezaan Masa Antara Baris Berturut-turut dalam Jadual?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!