teradata 根据组中有事件的组对事件数据进行排名
teradata rank event data based on group where group has events
我有一个数据集,我正在尝试在 teradata 中生成序列号
在下面的数据集中,订单 (550) 在商店中进行了多次修改(总共 10 次)
最后一列 ShopSequence 是我想要实现的,当订单移动到不同的商店时,ShopSequence 数字递增 1
因此,该数据集读取为在 4 家商店中进行了 10 次修改
有很多这样的订单
Order, Shop, SequenceNumber, ShopSequence
550, AA, 1 1
550, AA, 2 1
550, AA, 3 1
550, BB, 4 2
550, BB, 5 2
550, BB, 6 2
550, BB, 7 2
650, CC, 8 3
650, CC, 9 3
650, CC, 10 3
我尝试了许多 OLAP 配置,但不幸的是我无法让它工作
ROW_NUMBER() OVER (ORDER BY SequenceNumber asc, Shop asc) AS shop_row_number
,
RANK() OVER (PARTITION BY Shop asc ORDER BY SequenceNumber ASC
感谢您的宝贵时间
试试 DENSE_RANK OVER (ORDER BY Shop asc)
。
只要不存在具有相同 shop
值的第二组行,此方法就有效。
编辑:
根据您的评论值可能会重复,因此这也适用于重复的组,但需要嵌套 OLAP-functions:
select ...
sum(flag) -- calculate the rank
over (partition by Order
order by SequenceNumber
rows unbounded preceding) as ShopSequence
from
(
select ...
-- flag the rows where a new group starts
-- 'min...' can be replaced by LAG in TD16.10+
case when min(Shop)
over (partition by Order
order by SequenceNumber
rows between 1 preceding and 1 preceding) = Shop
then 0
else 1
end as flag
) as dt
我有一个数据集,我正在尝试在 teradata 中生成序列号 在下面的数据集中,订单 (550) 在商店中进行了多次修改(总共 10 次) 最后一列 ShopSequence 是我想要实现的,当订单移动到不同的商店时,ShopSequence 数字递增 1 因此,该数据集读取为在 4 家商店中进行了 10 次修改 有很多这样的订单
Order, Shop, SequenceNumber, ShopSequence
550, AA, 1 1
550, AA, 2 1
550, AA, 3 1
550, BB, 4 2
550, BB, 5 2
550, BB, 6 2
550, BB, 7 2
650, CC, 8 3
650, CC, 9 3
650, CC, 10 3
我尝试了许多 OLAP 配置,但不幸的是我无法让它工作
ROW_NUMBER() OVER (ORDER BY SequenceNumber asc, Shop asc) AS shop_row_number
,
RANK() OVER (PARTITION BY Shop asc ORDER BY SequenceNumber ASC
感谢您的宝贵时间
试试 DENSE_RANK OVER (ORDER BY Shop asc)
。
只要不存在具有相同 shop
值的第二组行,此方法就有效。
编辑:
根据您的评论值可能会重复,因此这也适用于重复的组,但需要嵌套 OLAP-functions:
select ...
sum(flag) -- calculate the rank
over (partition by Order
order by SequenceNumber
rows unbounded preceding) as ShopSequence
from
(
select ...
-- flag the rows where a new group starts
-- 'min...' can be replaced by LAG in TD16.10+
case when min(Shop)
over (partition by Order
order by SequenceNumber
rows between 1 preceding and 1 preceding) = Shop
then 0
else 1
end as flag
) as dt