Row Number() 订单问题

Row Number() Order Issue

如果之前有人问过这个特定的场景,请提前致歉,但我似乎无法正确排序(这可能是因为盯着它看太久了)。

我正在使用 Netezza/Oracle,在下面的数据集中 - 我基本上需要 order_num 来得到 1,2,2,2,2,3,4(基本上分组Department 和 Desc1(desc1 不是唯一的,因为每年都有不同的代码,但我只对类型感兴趣,而不是年份。)在其他尝试中,我尝试过:

row_number () over (partition by a.department order by desc1) order_num

按字母顺序排列。我还按 seq_no 和 desc1 订购了 - 但只有在我需要按字母顺序排列时才有效。

提前致谢。

你想要 dense_rank() 而不是 row_number():

dense_rank() over (partition by a.department order by desc1) order_num

如果要维护seqnum顺序,可以使用子查询计算:

min(seqnum) over (partition by department, desc1) as min_seqnum

然后在外部查询中使用 min_seqnum 作为 order by

能不能不用

dense_rank() over(partition by department, desc1 order by beg_date)

或者...

dense_rank() over(partition by department,desc1 order by seq_no)

假设国家与您显示的分组一致;如果您在 CTE 或子查询中获得每个国家/地区的最小值 seq_no,您可以在 dense_rank 函数中使用此值,例如

    SELECT 
       m.Department,
       m.Desc1,
       m.seq_no,
       m.Country,
       m.beg_date,
       m.end_date,
       dense_rank() OVER(PARTITION BY m.Department ORDER BY mintbl.MinSeq) 
FROM dbo.mytable AS m
JOIN ( SELECT min(m.seq_no) AS MinSeq,
               m.Department,
                         m.Country
        FROM dbo.mytable AS m
        GROUP BY m.Department,m.Country
     ) AS mintbl ON mintbl.Department = m.Department AND mintbl.Country = m.Country
ORDER BY m.seq_no