1

このようなテーブルから時系列を取得する必要があります

TimeStamp(timestamp)、Datapoint(float)、Data_source(integer)

したがって、次のクエリは、ソース1によって記録されたすべてのデータを取得します。

SELECT * 
  FROM table 
 WHERE data_source = 1

では、data_source = 1が他のソースよりも優先されるようにするにはどうすればよいですか?すなわち。ダブルスは必要ありません。常にソース1からのデータポイントが必要ですが、利用できない場合は別のものを選択してください。

これは、すべての行のsource=1の量をカウントするサブクエリを使用して行いました。しかし、それは信じられないほど遅いです。これを行うための効率的な方法が必要ですか?ソース1は、ポイントの約3%でのみ使用できます。1つのポイントに他のソースが複数存在する場合がありますが、一般的には他のソースでもかまいません。

私はmssql2008を使用しています。したがって、T-SQLが優先されますが、この問題は非常に一般的だと思いますか?

4

1 に答える 1

1

ソース1を優先して、データを1つのシリーズに結合したいようです。

これはどう:

select timestamp,
       datapoint
from (select t.*,
             min(data_source) over (partition by timestamp) as minDataSource
      from t
     ) t
where data_source = minDataSource

これは、「1」が最小のデータソースであることを前提としています。タイムスタンプごとに最小データソースを計算し、そのデータソースからのデータを使用します。

于 2012-07-30T12:34:38.603 に答える