Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengira Perbezaan Masa Antara Baris Berturut-turut dalam Jadual?

Bagaimana untuk Mengira Perbezaan Masa Antara Baris Berturut-turut dalam Jadual?

Barbara Streisand
Barbara Streisandasal
2024-11-15 06:09:02490semak imbas

How to Calculate Time Difference Between Consecutive Rows in a Table?

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!

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