排名/行号/排序问题

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)