1

次のデータベース構造があり、EntityFrameworkを使用しているとします。

ここに画像の説明を入力してください

5分ごとに、「phasecount」テーブルは「Phase」の各レコードのレコードを取得します。

using (Entities db = new Entities())
{
    db.ContextOptions.LazyLoadingEnabled = false;

    int numberofcontrollers = (from a in db.Junctions select a).Count();
    List<int> controllerids = (from b in db.Junctions select b.Id).ToList();

    var configuration = (from c in db.Configurations select c).First();

    DateTime laststamp = (from s in db.Stamps select s.Time).Max();
    DateTime firststamp = laststamp.AddMinutes(-1 * (CountIntervalsBefore - 1) * TimeSliceLength);

    var stamps = from s in db.Stamps.Include("PhaseCounts.Phase") where s.Time >= firststamp && s.Time <= laststamp orderby s.Id select s;
    // check consistency; number of stamps should equal timeslices*controllers

    if (stamps.Count() != CountIntervalsBefore * numberofcontrollers)
    {
         //counts are not available for all timeslices and controllers
         //do extended consistency check (and use dummy data?)
    }
}

すべてのフェーズの各フェーズカウントを1時間選択したいと思います。

スタンプは通常72に相当します。つまり、12個の5分スライス*6個のジャンクションです。

72に等しくない場合、どのフェーズとどのタイムスタンプにデータが欠落しているかを判断するにはどうすればよいですか?

4

1 に答える 1

0

解決策についての私の最初の考え。これは最適な検索方法ではないかもしれませんが、機能するはずです。

グループ内の最も早いタイムスタンプを取得し、そのタイムスタンプを持つレコードの数が実際に正しいことを確認します(あなたが言ったことから、これは6だと思います)。それから、このセットに欠けているものがあるかどうかを知ることができます。次に、現在のタイムスタンプに最も近いタイムスタンプを探します。約5分を大幅に超える場合は、セット全体が欠落しています。5分程度の場合は、最初のセットと同様に、そのタイムスタンプを持つレコードの数が正しいことを確認してください。(欠落しているレコードの合計+検出されたレコードの合計= 72)になるか、レコードがなくなるまで繰り返します。レコードの最後に到達してもまだ欠落しているものがある場合は、最も早いタイムスタンプが最初のタイムスタンプではなく、完全なセットも欠落しています。この時点で、

于 2013-02-19T09:10:54.250 に答える