sql - データベースの行間の日時の違い

sql

データベース内の異なる行間の平均時間差を返すクエリを作成しようとしています。基本的に、これは図に基づいてレコードを格納するテーブルに関係しています。決定列はRSP_TRM_IRNであり、RSP_TRM_IRNのさまざまな値の後続のエントリごとにタイムスタンプが格納されます。以下のサンプル表は、データの構造を示しています。次に、RSP_TRM_IRNの一意の値に基づいて、テーブルの各エントリの平均時間差を返します。スキーマも以下にあります。

スキーマ:

"RSP_IRN" type="bigint" width="8"
"RSP_DATETIME" type="timestamp" width="8"
"RSP_TRM_IRN" type="bigint" width="8"


配布方法を示すサンプルデータ:

RSP_TRM_IRN      RSP_DATETIME
93     2011-11-09 13:18:32
101    2011-11-03 11:49:10
7      2011-11-08 02:32:28
101    2011-11-14 16:48:43
108    2011-11-17 09:00:49
5      2011-10-12 09:30:28
213    2011-11-17 13:47:23
108    2011-11-17 07:18:15
7      2011-11-07 06:43:49
159    2011-11-21 06:49:25
5      2011-11-16 07:10:58
104    2011-11-03 15:17:39
108    2011-11-15 23:34:58
5      2011-11-22 09:38:02
108    2011-11-13 13:28:32
7      2011-10-26 00:07:26
100    2011-11-14 14:27:02
5      2011-11-14 21:56:05
7      2011-10-25 12:11:17
145    2011-11-21 15:26:17
5      2011-10-10 11:23:53


誰か助けてください。このためにphpを使用してみましたが、ループが多くなり、ロジックがかなり複雑になる可能性があります。上記のデータを使用して達成しようとしているのは、RSP_TRM_IRN = 5などの時間の平均時間差を取得することです。
答え
すべての期間が連続しているので、知る必要があるのはtime of the first eventtime of the last event、およびnumber of discrete periodsだけです。

その場合、平均は(終了-開始)/期間です。使用しているsqlの方言に応じて、(終了-開始)はさまざまな形式を取ることができます(SQL ServerのDATEDIFF()など)。

ここでは、必要な情報を取得する方法を説明します。

SELECT
  RSP_TRM_IRN,
  COUNT(*) - 1         AS periods,
  MIN(RSP_DATETIME)    AS start,
  MAX(RSP_DATETIME)    AS finish
FROM
  yourTable
GROUP BY
  RSP_TRM_IRN


SQL Serverは次に使用します...

DATEDIFF(SECOND, MIN(RSP_DATETIME), MAX(RSP_DATETIME)) / (COUNT(*) - 1) AS Average_Period_Length
関連記事

php - Oracleストアドプロシージャから配列結果を取得する方法

sql - 中間行を挿入する方法は?

sql - 変更された行を検索(nullを含む複合キー)

php - クエリ結果で関連する(結合された)テーブルのフィールドを並べ替える方法

sql - SQL日付オプション

sql - Web Crystalレポートでデータベースログオンが失敗する

c# - SqlCommandBuilderを使用した後、挿入、削除、更新コマンドがnullになる

php - PHPおよびmySQLでの複数のSELECTクエリと結果のループ

sql - SQLは2つのクエリをJOINと組み合わせます

sql - 2つの異なるフィールドを持つ「case」ステートメント内で「like」を使用する