我在使用 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 更有可能只计算一次。