【问题标题】:Picking timeseries from SQL database in source priority order按源优先顺序从 SQL 数据库中挑选时间序列
【发布时间】:2012-07-28 02:49:27
【问题描述】:

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

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 会更受欢迎,但我认为这个问题很普遍?

【问题讨论】:

  • 什么是双重的?时间戳?数据点?未列出的内容?

标签: sql sql-server tsql time-series


【解决方案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”是最小的数据源。它计算每个时间戳的最小数据源,然后使用来自该数据源的数据。

【讨论】:

  • 酷,谢谢,这显然是比我使用的更好的子查询。我认为这不能在没有子查询的情况下完成。我稍微改变了一下,所以所有的表都不叫 t (即一个人想在子查询中有另一个字母)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-21
  • 1970-01-01
相关资源
最近更新 更多