SQL Server:LAG()OVER(Y排序)将相同的结果应用于重复的Y值

时间:2019-04-11 22:35:14

标签: sql sql-server

当我使用

LAG(Static_Col_2, 1) OVER (ORDER BY Static_Col_1) AS LAGged_Col

我得到这些结果:

Static_Col_1   Static_Col_2   LAGged_Col
----------------------------------------
      1           456           NULL 
      2           457           456  
      3           458           457 
      4           459           458 
      5           460           459 
      5           461           460 
      5           462           461

但是我想要:

Static_Col_1   Static_Col_2   LAGged_Col
----------------------------------------
      1           456           NULL 
      2           457           456  
      3           458           457 
      4           459           458 
      5           460           459 
      5           461           459 
      5           462           459

当重复“ 5”时,LAG每次应指向“ 4”。

1 个答案:

答案 0 :(得分:2)

我认为您不能在SQL Server中使用简单的窗口函数来完成此操作。您可以嵌套窗口函数或使用group by / join

select t.*, tt.prev_col2
from t join
     (select col1, lag(max(col2)) over (order by col1) as prev_col2
      from t
      group by col1
     ) tt
     on t.col1 = tt.col1
order by 1;

Here是db <>小提琴。