2012-07-30 60 views
1

我需要从看上去只有这样采摘时间序列

时间戳(时间戳),数据点(浮点),DATA_SOURCE(整数)

所以一台拉时间序列下面的查询会给我通过源1.

SELECT * 
    FROM table 
WHERE data_source = 1 

记录的所有数据现在,我该如何挑选让DATA_SOURCE = 1,优先于其他来源?即。我不想要双打,我总是想要一个数据点,最好来自源码1,但如果不可用,则选择其他。

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

我在MS SQL 2008上。所以T-SQL会被优先考虑,但是我认为这个问题相当普遍?

+0

什么构成双?时间戳?数据点?没有列出的东西? – 2012-07-30 12:26:44

回答

1

这听起来像你想你的数据合并到一个单一系列,prefering源1

如何:

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

这假定“1”是最小的数据源。它会计算每个时间戳的最小数据源,然后使用该数据源中的数据。

+0

很酷,谢谢,这是一个明显比我使用的更好的子查询。我认为这不能没有子查询。我只是稍微改了一下,所以所有的表都不叫t(即,一个人想在子查询中有另一个字母) – JohnKay 2012-07-30 13:59:13