如果先前已经询问过这个具体情况,请提前道歉,但我似乎无法正确地订购这些情况(可能是因为长时间盯着它)。
我正在使用Netezza / Oracle,并且在下面的数据集中 - 我基本上需要order_num来产生1,2,2,2,2,3,4(基本上分组Department和Desc1(desc1不是唯一的)因为每年都有不同的代码,但我只对这种类型感兴趣,而不是年份。)其他尝试中,我尝试过:
row_number()over(由desc1按部门顺序划分)order_num
按字母顺序排序。我也是通过seq_no和desc1订购的 - 但只有在我按字母顺序需要它时才有效。
提前致谢。
答案 0 :(得分:1)
您需要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
。
答案 1 :(得分:1)
假设国家与您所显示的分组一致;如果在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
答案 2 :(得分:0)
你能否使用
dense_rank() over(partition by department, desc1 order by beg_date)
或者...
dense_rank() over(partition by department,desc1 order by seq_no)