例如,我有一张桌子(每天排名增加一):
Rank,day
1 ,sunday
1 ,sunday
1 ,sunday
1 ,sunday
2 ,monday
3 ,friday
,我想添加新的列调用“组”,对于 每个组 ,该列调用每3行增加1。 例如:(每天有4行:星期日,因此前3行将为1,从第4行到第6行则为2,依此类推...):
Rank,group,day
1 ,1 ,sunday
1 ,1 ,sunday
1 ,1 ,sunday
1 ,2 ,sunday
2 ,1 ,monday
3 ,1 ,friday
如何使用plsql添加列组?
我不能使用rownum,因为我在第一列“ Rank”中使用了row_number函数。
谢谢。
编辑:18年11月7日:
我想为排名列添加另一个条件,称为时间。 例如:
Rank,group,day,time
1 ,1 ,sunday ,08:00
1 ,1 ,sunday ,08:00
2 ,1 ,sunday ,09:00
3 ,2 ,sunday ,10:00
4 ,1 ,monday ,08:00
5 ,1 ,friday ,09:00
5 ,1 ,friday ,09:00
有什么建议吗?
答案 0 :(得分:1)
您可以通过使用row_number()
分析函数为组中的每一行分配一个数字来实现。然后,您可以将每行编号除以3,然后找到该编号的上限。这意味着该组中的前三行的值为1,接下来的三行为2,依此类推:
WITH your_table AS (SELECT 1 rnk, 'sunday' dy FROM dual UNION ALL
SELECT 1 rnk, 'sunday' dy FROM dual UNION ALL
SELECT 1 rnk, 'sunday' dy FROM dual UNION ALL
SELECT 1 rnk, 'sunday' dy FROM dual UNION ALL
SELECT 2 rnk, 'monday' dy FROM dual UNION ALL
SELECT 3 rnk, 'friday' dy FROM dual)
SELECT rnk,
dy,
ceil(row_number() over (PARTITION BY rnk ORDER BY dy)/3) grp
FROM your_table
ORDER BY rnk, dy, grp;
RNK DY GRP
---------- ------ ----------
1 sunday 1
1 sunday 1
1 sunday 1
1 sunday 2
2 monday 1
3 friday 1
答案 1 :(得分:0)
请检查自2018年11月7日起的更新。