1

緊急インシデントに関連するデータを含むテーブルがあります。重複するインシデントの数を (時間ごとに) 比較したいと考えています。データベースは本質的に順序付けされていないことはわかっていますが、インシデントの開始 (および終了) 時刻があるため、レコードを時間順に並べることができます。

最終結果は、各レコードと、インシデントが重複しているかどうかを示す追加のフィールドを含む結果セットになると思います (なしの場合は 0、1 つの重複の場合は 1、2 つの重複の場合は 2...)。歴史的に、オーバーラップの数は限られています (現在の最大値は 6 です) が、それ以上のオーバーラップを持つことも可能です。

現在、私はExcelでこの種の分析を行っており、現在のレコードと以前のレコードを比較して重複があるかどうか(または重複があるかどうか)を判断するヘルパー列を使用していますが、これを達成できるはずです厳密に SQL 内。

編集: これは Excel のサンプルですが、データは単一の SQL テーブルに保持されます。私はデータベースの管理者特権を持っているので、データベース構造 (COTS システム) を変更することを除いて、ほぼすべてのソリューションを実装できます。オーバーラップ列の式を含めました。また、サンプル フォーミュラを 2 つのオーバーラップで停止しましたが、回答を実装するときにさらに説明します。

Incident    Start               End          Overlap    Overlap Formula
    1   2012-01-01 07:00    2012-01-01 08:00        
    2   2012-01-02 07:00    2012-01-02 08:00    0   =IF(C2>B3,1,0)
    3   2012-01-02 07:30    2012-01-02 08:30    1   =IF(C3>B4,IF(C2>B4,2,1),0)
    4   2012-01-03 07:00    2012-01-03 08:00    0   =IF(C4>B5,IF(C3>B5,2,1),0)
    5   2012-01-04 07:00    2012-01-04 08:00    0   =IF(C5>B6,IF(C4>B6,2,1),0)
    6   2012-01-04 07:30    2012-01-04 08:30    1   =IF(C6>B7,IF(C5>B7,2,1),0)
    7   2012-01-04 07:45    2012-01-04 08:45    2   =IF(C7>B8,IF(C6>B8,2,1),0)
    8   2012-01-04 08:45    2012-01-04 09:45    0   =IF(C8>B9,IF(C7>B9,2,1),0)
    9   2012-01-05 07:00    2012-01-05 08:00    0   =IF(C9>B10,IF(C8>B10,2,1),0)
4

2 に答える 2

1

私の英語はとても下手なので、あなたの問題を完全には理解していません

それが私の考えであれば、sql http://www.w3schools.com/sql/sql_groupby.aspで group by を使用できます

select incident, count(*)
from your table
group by incident

また、日付がある場合は、このクエリを日付の範囲に指定できます

select incident, count(*)
from your table
where startDate >= @startDate  and endDate <= @finishDate
group by incident

2 つの日付の間にこれを行いたい場合のみ

下手な英語で申し訳ありません。これがあなたの望むものでない場合は申し訳ありません!

于 2012-06-06T13:01:18.393 に答える