ホームページ >データベース >mysql チュートリアル >SQLテーブルの連続する行間の時間差を計算するにはどうすればよいですか?
連続する行間の時間差の計算
このタスクは、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 サイトの他の関連記事を参照してください。