Ранжировать каждые x строк в группе

Например, у меня есть таблица (увеличение ранга на единицу каждый день):

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

и я хочу добавить новый вызов столбца "группа", который увеличивается на 1 каждые 3 строки для каждой группы. например: ( 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, потому что я использовал функцию row_number для первого столбца «Rank».

Благодарю.

РЕДАКТИРОВАНИЕ: 18 НОЯБРЯ 07:

Я хочу добавить еще один критерий для столбца ранга, который называется временем. Например:

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

любой совет?


person cas s3    schedule 01.11.2018    source источник
comment
вы должны попробовать сгруппировать день в подзапросе, например, когда (выберите количество (*) из группы таблиц по дням) > 2, затем увеличьте   -  person Himanshu Ahuja    schedule 01.11.2018


Ответы (2)


Вы можете сделать это, используя аналитическую функцию 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
person Boneist    schedule 01.11.2018

Пожалуйста, проверьте обновление от 7 ноября 2018 г.

person cas s3    schedule 07.11.2018