Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Row 排名/行号/排序问题_Row_Teradata_Rank_Partition - Fatal编程技术网

Row 排名/行号/排序问题

Row 排名/行号/排序问题,row,teradata,rank,partition,Row,Teradata,Rank,Partition,我试图将某种类型的排名系统应用于我的数据集,但遇到了麻烦 我的问题: RANK() OVER(PARTITION BY Staff, Storage ORDER BY Order_Flow) 本质上,每当存储20出现时,我都要为该行分配一个数字,并且它与存储20的下一次出现之间的任何内容都具有相同的数字。然后从下一次发生的存储20到下一次,同样的事情 我当前的排名函数将无法准确捕获存储80,因为它只是在订单流中稍后才开始出现 请查看图像(它可以从1开始,不一定必须从0开始) 这似乎可以通过在窗

我试图将某种类型的排名系统应用于我的数据集,但遇到了麻烦

我的问题:

RANK() OVER(PARTITION BY Staff, Storage ORDER BY Order_Flow)
本质上,每当存储20出现时,我都要为该行分配一个数字,并且它与存储20的下一次出现之间的任何内容都具有相同的数字。然后从下一次发生的存储20到下一次,同样的事情

我当前的排名函数将无法准确捕获存储80,因为它只是在订单流中稍后才开始出现

请查看图像(它可以从1开始,不一定必须从0开始)


这似乎可以通过在窗口函数中使用
重置来解决:

MAX() OVER(
  PARTITION BY <...> 
  ORDER BY Order_Flow 
  RESET WHEN Storage = 20
)
MAX()结束(
分割
按订单流动
当存储=20时重置
)
如果您只想控制排序而不需要进行任何分区,我相信您可以通过
省去
分区。或者只使用一个常量值,比如
除以1
或者类似的东西

文档:

堆栈溢出

这是一个简单的案例累积总和:

sum(case when Storage = 20 then 1 else 0 end)
over(Partition By Staff
     Order By Order_Flow
     rows unbounded preceding)

但是,这会产生一个增量,然后重置。我需要存储区20之间的所有内容都是相同的编号……好的,那么您可能可以使用
MAX()
MIN()
而不是
行编号()
。很抱歉,我无法访问TD系统,无法查看您附加的图像。你能试一试吗?它可以是分配给20到20之间行的任何数字吗?或者这些数字必须是连续的?i、 e.第一对20之间的10行被分配值1;下一对20之间的15行的值为2?多亏了馄饨。Min()看起来像是成功了,尽管它分配了奇数。Sequential将非常棒,因为我认为在接下来的表中管理它会变得更加棘手。我使用了这个Min()方法和第二个稠密_秩来获得序列号。可能不太好看,所以优化建议肯定是受欢迎的。多亏了Dnoeth,这个方法最终给所有记录打了“2”。我使用了前面提到的Min(),然后进行了第二次稠密排序,以获得我要查找的序列号。如果有更有效的方法,我很想听听。对不起,我忘了前面的
行是无界的