1

我需要从看起来像这样的表中提取时间序列

TimeStamp(时间戳)、Datapoint(浮点数)、Data_source(整数)

因此,以下查询将为我提供源 1 记录的所有数据。

SELECT * 
  FROM table 
 WHERE data_source = 1

现在,我如何选择使 data_source = 1 优先于其他来源?IE。我不想要双打,我总是想要一个最好来自源 1 的数据点,但如果不可用,请选择其他东西。

我使用子查询来计算每一行的 source=1 的数量。但这非常慢。必须有一种有效的方法来做到这一点?源 1 仅适用于大约 3% 的点。一个点可能有多个其他来源,但通常任何其他来源都可以。

我在 ms sql 2008 上。所以 T-SQL 会更受欢迎,但我认为这个问题很普遍?

4

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 回答