4

イベントを含むデータベースがあります。すべてのイベントにはタイムスタンプがあります。イベントは 1 日を通して均等に広がっていますが、毎晩、データのない期間があります。私の問題は、夜が明確に定義されていないことです。午後 23 時から翌日の午前 7 時まで、または同日の午前 2 時から午前 10 時まで、または同日の午後 8 時から午後 23 時までの場合もあります。

今、私はイベントの間隔を計算したいのですが、イベントのない大きな期間はありません。しかし、このタイムスパンを見つける方法がわかりません。私の問題は、タイムスパンのない日、または同じタイムスパンの 2 日 (たとえば、1 日目の午後 8 時から午前 0 時まで、2 日目の午前 0 時から午前 7 時まで) が存在する可能性があることです。

私の質問は今です:このタイムスパンを見つける方法は?

MySql のみでのソリューションを希望しますが、それが不可能な場合は、PHP も使用できます。

4

2 に答える 2

2

テーブルを次の行に自己結合してから、結合されたテーブル間の時間差を実行し、最大の差を見つけるのはどうですか?

スキーマが次のようなものであると仮定します (エントリが時間順であると仮定します):

CREATE TABLE log (
  id INT NOT NULL AUTO_INCREMENT,
  occurred_at DATETIME,
  event VARCHAR(255),
  PRIMARY KEY (id),
  INDEX (occurred_at)
);

このようなもの:

SELECT 
  TIMEDIFF(after.occurred_at, before.occurred_at) AS time_gap,
  `before`.*, 
  `after`.*
FROM 
  log `before` JOIN 
  log `after` ON after.id = before.id+1 
ORDER BY time_gap DESC LIMIT 1;
于 2012-09-16T09:44:12.987 に答える
0

並べ替えられたイベントのリストを処理して、毎日の中で最大のギャップを探してみませんか?

並べ替えられたリストでギャップを見つけるのは簡単です。「最小 1 時間」や「12-6 間隔と重なる」など、いくつかのしきい値を定義すると、完全なギャップ検出ができます。

ところで、それは実際には「データマイニング」ではありません。- 非常に単純なデータ クエリです。

于 2012-09-16T11:17:23.583 に答える