排名/行号/排序问题
Issue with Ranking / Row Number / Ordering
我正在尝试将某种类型的排名系统应用于我的数据集,但遇到了问题。
我的问题:
RANK() OVER(PARTITION BY Staff, Storage ORDER BY Order_Flow)
基本上,每当出现 Storage 20 时,我想为该行分配一个数字,并且它与下一次出现的 Storage 20 之间的任何内容都具有相同的数字。然后从下一次出现 Storage 20 到下一次,同样的事情。
我当前的 Rank 函数无法准确捕获 Storage 80,因为它只是在订单流的后期才开始出现。
请看图(可以从1开始,不一定要从0开始)
image of example data
看起来这可以通过在 window 函数中使用 RESET WHEN
来解决:
MAX() OVER(
PARTITION BY <...>
ORDER BY Order_Flow
RESET WHEN Storage = 20
)
我相信如果您只想控制排序而不需要进行任何分区,则可以省略 PARTITION BY
。或者只使用一个常量值,比如 PARTITION BY 1
或类似的东西。
文档:
https://docs.teradata.com/reader/756LNiPSFdY~4JcCCcR5Cw/8uRgqNTevlcmjBfsU3WQsw
计算器:
这是一个 CASE 的简单累积和:
sum(case when Storage = 20 then 1 else 0 end)
over(Partition By Staff
Order By Order_Flow
rows unbounded preceding)
我正在尝试将某种类型的排名系统应用于我的数据集,但遇到了问题。
我的问题:
RANK() OVER(PARTITION BY Staff, Storage ORDER BY Order_Flow)
基本上,每当出现 Storage 20 时,我想为该行分配一个数字,并且它与下一次出现的 Storage 20 之间的任何内容都具有相同的数字。然后从下一次出现 Storage 20 到下一次,同样的事情。
我当前的 Rank 函数无法准确捕获 Storage 80,因为它只是在订单流的后期才开始出现。
请看图(可以从1开始,不一定要从0开始)
image of example data
看起来这可以通过在 window 函数中使用 RESET WHEN
来解决:
MAX() OVER(
PARTITION BY <...>
ORDER BY Order_Flow
RESET WHEN Storage = 20
)
我相信如果您只想控制排序而不需要进行任何分区,则可以省略 PARTITION BY
。或者只使用一个常量值,比如 PARTITION BY 1
或类似的东西。
文档:
https://docs.teradata.com/reader/756LNiPSFdY~4JcCCcR5Cw/8uRgqNTevlcmjBfsU3WQsw
计算器:
这是一个 CASE 的简单累积和:
sum(case when Storage = 20 then 1 else 0 end)
over(Partition By Staff
Order By Order_Flow
rows unbounded preceding)