ホームページ > データベース > mysql チュートリアル > テーブル内の連続する行間の時間差を計算するにはどうすればよいですか?

テーブル内の連続する行間の時間差を計算するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-11-15 06:09:02
オリジナル
527 人が閲覧しました

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

テーブルの連続する 2 つの行の時差を計算する方法

「StartDate」という列を持つテーブルでは、多くの場合、隣接するレコード間の時間差。最近、あるユーザーが requestId と startdate テーブルを操作中にこの問題に遭遇し、支援を求めました。

ユーザーが提供したテーブルには次のようなデータが含まれていました:

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

ユーザーの目的は計算することでした隣接する行の各ペア間の時間差 (例: requestId 1 と 2、2 と 3 など)。彼らは自己結合の必要性を認識していましたが、適切な ON 句を記述するのに苦労しました。

提供されたソリューションは、同じテーブルの 2 つのインスタンス (A と B というエイリアス) 間の INNER JOIN を利用していました。 ON 句は、行 B の requestId が行 A の requestId に 1 を加えた値に等しいことを指定しました。

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
ログイン後にコピー

このクエリは、連続する行間の要求された時間差を正常に計算して返しました。ただし、requestId が連続していない場合は、別のアプローチが必要です。

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
ログイン後にコピー

この変更されたクエリでは、CROSS JOIN を使用して、テーブル内の各行を他のすべての行と照合します。次に、サブクエリは、現在選択されている requestId より大きい最小の requestId を選択し、連続する行のみが比較されるようにします。

以上がテーブル内の連続する行間の時間差を計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート