Позиция каждого х строк в группе
Например, у меня есть таблица (ранг увеличивается на единицу каждый день):
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 для первого столбца "Ранг".
Благодарю.
РЕДАКТИРОВАТЬ: 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 ответа
Вы можете сделать это с помощью 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