以源优先级顺序从SQL数据库中选取时间序列

时间:2012-07-30 12:20:46

标签: sql sql-server tsql time-series

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

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

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

SELECT * 
  FROM table 
 WHERE data_source = 1

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

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

我在ms sql 2008上。所以T-SQL会被优先考虑,但我认为这个问题很普遍吗?

1 个答案:

答案 0 :(得分: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"是最小的数据源。它计算每个时间戳的最小数据源,然后使用该数据源中的数据。