这是我根据qty
outer_index_group
获得的dense_rank
获得col1
(数量)的任务来自 col2
,col3
,row_number
的col1
的,col2
,col3
和inner_index_group。
这里有规则:
1)在每个outer_index_group
内,如果col4
有4055和4086,qty
我应该得到的是行inner_index_group
4086在inner_index_group
3或2中。
2-如果col4
只有4055,则直接从该行获取数据。
结果就是这样
你觉得我会怎么做?我正在考虑case when
,但我不知道如何处理这种情况。
非常感谢。
SELECt col1,col2,col3,col4,qty
,dense_rank() over (order by col1,col2,col3) as outer_index_group
, ROW_NUMBER() over (partition by col1,col2,col3 order by col1,col2,col3) as inner_index_group from table
答案 0 :(得分:0)
select * from
(
select col1,col2,col3,col4,qty
,dense_rank() over (order by col1,col2,col3) as outer_index_group
,row_number() over (partition by col1,col2,col3 order by col1,col2,col3) as inner_index_group
,RANK() over (partition by col1,col2,col3 order by col1,col2,col3,col4 desc) as rnk
from myTable
) T
where rnk = 1
这里重要的部分是Rank()over(...,col4 desc)。它会将最高等级1分配给col1,col2,col3的每个分区中具有最大值的行。所以,如果在分区中有col4 = 4086的行,它们将获得等级1,其余的col4 = 4055获得等级2;如果某些分区中没有显示此类行,则col4 = 4055的行将在此处获得排名。
如果每个分区只需要1行(rank()可以将rnk = 1分配给多个行,则rank()可以用row_number()替换