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

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

Mary-Kate Olsen
リリース: 2024-11-19 15:23:02
オリジナル
636 人が閲覧しました

How to Calculate the Time Difference Between Consecutive Rows in SQL?

SQL JOIN を使用して連続する行間の時間差を計算する

データ分析の領域では、連続する行間の時間差を計算すると、貴重な情報が得られます。洞察。たとえば、StartDate という名前の列を含むテーブルで、イベント期間をキャプチャしたり、パターンを識別したりするために、連続するレコード間の経過時間を判断したい場合があります。

この目的を達成するには、1 つのアプローチとして自己結合を利用します。手術。このコンテキストでは、ROW_NUMBER() 関数または同様のランキング メカニズムを使用して、隣接するレコードを識別できます。ただし、join ステートメントで ON 句を使用するより効率的な解決策が存在します。

次の例を考えてみましょう:

<p>SELECT A.requestid, A.starttime, ( B.starttime - A.starttime) AS timedifference<br>FROM MyTable A INNER JOIN MyTable B ON B.requestid = A.requestid 1<br>ORDER BY A.requestid ASC<br>

このクエリでは、B.requestid が A.requestid 1 と等しいという条件で、テーブル A がそれ自体に結合されます。これにより、時間差が行 B と A の starttime 値の差として計算され、連続する行を選択できるようになります。

の場合たとえば、テーブル A に次のデータが含まれている場合:

requestId starttime
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 starttime timedifference
1 2011-10-16 13:15:56 00:00:03
2 2011-10-16 13:15:59 00:00:00
3 2011-10-16 13:15:59 00:00:03
4 2011-10-16 13:16:02 00:00:03
連続した requestid 値が保証されていない場合は、 CROSS JOIN とその後のフィルタリング句を使用できます:

<p>SELECT A.requestid, A.starttime, (B.starttime - A.starttime) AS timedifference<br>FROM MyTable A CROSS JOIN MyTable B<br>WHERE B.requestid IN (SELECT MIN(C.requestid) FROM MyTable C WHERE C.requestid > A.requestid)<br>ORDER BY A.requestid ASC<br>

このクエリにより、requestid の順序に関係なく、隣接する行に対してのみ時差が計算されます。

これらの SQL テクニックを利用すると、データ テーブル内の連続する行間の時間差を効果的に計算でき、データ分析と分析に役立ちます。解釈。

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

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