为了简单起见,我正在简化现实......
我有一张包含数百万次温度观测的表格:ObservationID,LocationID,Observation_Date,Temperature
我想编写一个查询,但也可以派生其他列,
ObservationID, LocationID, Observation_Date, 温度, Temperature_At_Last_Observation, Temperature_2_observations_ago, Temperature_3_observations_ago, Temperature_4_observations_ago, ..等..
实际上这要复杂得多,而且表中确实有数百万行。所以我想知道哪种方法最有效。
我是否从递归角度对此进行攻击?或者,因为我每行至少会有15个新列,这意味着递归会效率低下吗?
或者我是否坚持使用基于集合的方法,将观察分区为排序顺序然后加入LocationID?
有什么建议吗?
幸运的是,我还可以选择将数据加载到Teradata平台或SQL Server 2008R2平台。
答案 0 :(得分:2)
坚持使用基于SET的方法。
在SQL Server中,考虑将LEAD()和LAG()与Window Aggregate函数一起使用。
在Teradata中,你可以使用Window Aggregate函数结合ROW BETWEEN n PRECEDING和n PRECEDING来回顾'n'行。
有关Teradata的示例,请查看对问题Compare 3 Consecutive Rows in a table的回复。