这在Oracle视图中是一个问题。我有一个包含Emp_id
,Start_Period
和Key
的表。样本数据以开始时间的降序给出,顶部为201909。需要生成一个名为Key_order的列。 (最后,我打算创建一个包含所有4列的视图。)
具有所示的示例数据。在带有Start_period
的排序列表中,从第1位到第1位然后在键更改顺序必须加一时出现的第一个位置。
第1行和第2行中的键相同,顺序为1。在第3行SCD
中更改为ABC,因此顺序必须增加1,所以顺序值为2。第4个位置键更改,并且顺序变为3
请参见第7位和第8位的位置值相同,因此两者的顺序均保持为6。我正在尝试在视图内执行此操作。尝试过RANK()
,但它正在对Key列进行排序并根据该命令给出顺序。
请帮助。Sample Data
答案 0 :(得分:1)
在每行中设置一个与前一行具有不同密钥的密钥。为此使用LAG
。然后使用SUM OVER
构建这些组件的运行总数。
select
emp_id, start_period, key,
sum(chg) over (partition by emp_id order by start_period desc) as key_order
from
(
select
emp_id, start_period, key,
case when key = lag(key) over (partition by emp_id order by start_period desc)
then 0 else 1 end as chg
from mytable
)
order by emp_id, start_period desc;