SQL:在选择中使用两次滞后/超前结果



我在使用 SQL Server 时遇到这种情况,我需要在选择中使用 Lag/Lead 操作的相同结果。在选择中使用相同的滞后/超前操作是否存在性能问题? 所选内容将遍历 1000 万行。 滞后/超前操作的分区依据/排序依据遵循复合索引。

如果问题存在,那么我该怎么做才能避免这个问题?

我的滞后/潜在客户使用示例:

select *,
datediff( COLUMN1, LAG(SECOND, COLUMN2.......) ) AS DATE1,
datediff( COLUMN3, LAG(SECOND, COLUMN2.......) ) AS DATE2,
from mytable

.....

滞后操作完全相等。只有第一个日期差异参数发生了变化。我已经尝试将滞后的结果称为"滞后结果",并在日期差异中用@调用他。不工作。

此致敬意 路易斯

不应有明显的性能影响。 但是,如果您只想表示一次滞后,请使用子查询:

select t.*,
datediff( COLUMN1, prev_column_2) AS DATE1,
datediff( COLUMN3, prev_column_2 ) AS DATE2,
from (select t.*,
LAG(COLUMN2) OVER ( . . . ) as prev_column2
from mytable t
) t

通过将表达式移动到FROM子句,SQL Server 更有可能只计算一次。

最新更新