テーブルの連続する 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 サイトの他の関連記事を参照してください。