我需要从看起来像这样的表中拉出时间序列
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会被优先考虑,但我认为这个问题很普遍吗?
答案 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"是最小的数据源。它计算每个时间戳的最小数据源,然后使用该数据源中的数据。