为了简单起见,我正在简化现实......
我有一个包含数百万个温度观测值的表:ObservationID、LocationID、Observation_Date、温度
我想编写一个查询,但还要派生其他列,
观察ID, 位置ID, 观察日期, 温度, 最后观察时的温度, 温度_2_观察_前, 温度_3_观察_前, 温度_4_观察_前, ..等等..
实际上,这要复杂得多,表中确实有数百万行。所以我想知道哪种方法最有效。
我是否从递归的角度来攻击这个问题?或者因为我每行至少有 15 个新列,这是否意味着递归效率低下?
或者我是否坚持使用基于集合的方法,将观察结果划分为排序顺序,然后加入 LocationID?
有什么建议吗?
幸运的是,我还可以选择将数据加载到 Teradata 平台或 SQL Server 2008R2 平台。
最佳答案
坚持基于 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 的响应.
关于sql - 数据转换的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16173345/