我通过许多列表简化了以下内容。
Person Period Cost_Center Previous_Cost_Center
----------- ---------------- ----------- ----------------------
123 2019003 1
123 2019004 1
123 2019005 2
123 2019006 2
123 2019007 3
对于每个人,我想找到他以前的成本中心并将其保存在相应的列中。以前的成本中心必须与当前的不同。
我想得到什么:
Person Period Cost_Center Previous_Cost_Center
----------- ---------------- ----------- ---------------------
123 2019003 1 NULL
123 2019004 1 NULL
123 2019005 2 1
123 2019006 2 1 <----- Problematic row
123 2019007 3 2
在此期间的标准 LAG() 函数实际上会输出:
Person Period Cost_Center Previous_Cost_Center
----------- ---------------- ----------- ---------------------
123 2019003 1 NULL
123 2019004 1 NULL
123 2019005 2 1
123 2019006 2 2 <----- Problematic row
123 2019007 3 2
我想在有问题的行中是最后一个不同的 Cost_Center 值,它是 1 而不是 2。我想使用的是检查以前的 Cost_Center 是否不同:
CASE
WHEN
LAG ( Cost_Center ) OVER ( PARTITION BY Person ORDER BY Period ) != Cost_Center
THEN
LAG ( Cost_Center ) OVER ( PARTITION BY Person ORDER BY Period )
ELSE
Previous_Cost_Center
END
AS Previous_Cost_Center,
但后来我最终在第 4 行中根本没有 Previous_Cost_Center 值。如何使用 SQL 归档?如何接管最后一个不同的 Cost_Center 值以将其保存在按期间排序的 Previous_Cost_Center 中?