0

例如,我有一张表(排名每天增加一个):

Rank,day 
1  ,sunday 
1  ,sunday 
1  ,sunday 
1  ,sunday 
2  ,monday 
3  ,friday

我想添加新的列调用“组”,每个组每 3 行增加 1 个。例如:( 4 rows for day: sunday 所以前 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

有什么建议吗?

4

2 回答 2

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
于 2018-11-01T08:52:58.073 回答
0

请检查 2018 年 11 月 7 日的更新。

于 2018-11-07T09:54:14.583 回答