Оцените каждые x строк в группе - PullRequest
0 голосов
/ 01 ноября 2018

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

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

и я хочу добавить новый вызов столбца 'group', который увеличивается на 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'.

спасибо.

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

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

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

любой совет?

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

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

0 голосов
/ 01 ноября 2018

Это можно сделать с помощью аналитической функции 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...