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

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

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-15 12:55:03360ブラウズ

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

連続する行間の時間差の計算

このタスクは、StartDate 列を含むテーブル内の連続するレコード間の時間差を決定することです。これを実現するには、自己結合を利用して、各レコードをテーブル内の後続のレコードと比較します。

自己結合の使用:

連続したものを比較するにはレコードの場合、テーブルで自己結合を使用できます。クエリの例を次に示します。

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;

このクエリは、各レコード (A) が次のレコード (B) とペアになっている結合テーブルを作成します。計算された列の時間差は、2 つのレコード間の時間差を示します。

連続しないリクエスト ID の処理:

リクエスト ID が連続していない場合は、 CROSS JOIN と、各レコードをその直接の後続レコードと照合するための追加のフィルタリング。

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;

このクエリにより、リクエスト ID が連続していない場合でも、各レコードがその直接の後続レコードと照合されます。

サンプル データ:

作成者が提供したサンプル データを検討します:

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 startdate timedifference
1 2011-10-16 13:15:56 NULL
2 2011-10-16 13:15:59 00:00:03
3 2011-10-16 13:15:59 00:00:00
4 2011-10-16 13:16:02 00:00:03
5 2011-10-16 13:18:07 00:02:05

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。