「大きな」(数十万行)テーブルがあります(dataPointsと呼びます)。データポイントと 1 対多の関係を持つ「イベント」の別のテーブル。events テーブルには、タイプの TimeStamp 列がありDateTimeOffset
ます。特定の時間範囲内のすべてのデータポイントをクエリしたいのですが、重要な注意点が 1 つあります。入力カットオフ時間まで補間する必要があります。
例: 過去にランダムに分散した時刻 (-1 時間、-5 時間、-8 時間、-11 時間、-13 時間) にイベントがあるとします。これらのイベントのそれぞれがいくつかの dataPoints を作成し、過去 12 時間のすべてのデータポイントを照会したいと考えています。これらすべてのポイント (-13 時間のポイントを含む) に関連付けられたデータポイントを取得する必要があります。この理由は、カットオフ時間 (-12 時間) のデータが必要なためです。したがって、-11 時間のポイントと -13 時間のポイントの両方が必要なので、-12 時間に補間できます。where dataPoint.Event.Time > currentTime - 12
単純に、それ以上のポイントを獲得する必要があるとは言えません。
これを LINQ to SQL で表現する方法はありますか? 私は2つのアイデアしか思いつきませんでした:
1) ヒューリスティック (カットオフを 2 倍にする) を使用して、十分なポイントがあることを確認します。これは堅牢ではなく、無駄になる可能性があります。
2) 最初にすべてのイベントをクエリし、それらを並べ替え、手動でロールオーバーするだけで最後に必要なイベントを特定し、計算されたイベントよりも少ないタイムスタンプですべてのデータポイントをクエリします。これには多くのコードが必要であり、無駄でもあります。
他のアイデアはありますか?