2012-05-16 1 views
3

У меня есть некоторые данные в формате, описанном в этом sqlfilddle: http://sqlfiddle.com/#!4/b9cdf/2Рейтинг/Подсчет строк на основе столбца Value

В основном, таблица с идентификатором пользователя и время, что событие произошло. То, что я хотел бы сделать, - это подсчет событий, основанных на времени, которое они совершили пользователем. Таким образом, таблица, которая выглядит следующим образом:

UID Timestamp 
----------------- 
01  01-APR-12 
01  01-APR-12  
02  02-APR-12  
03  05-APR-12  
01  10-APR-12  
02  11-APR-12  
03  15-APR-12  
01  20-APR-12  

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

UID Timestamp  Rank 
-------------------------- 
01  01-APR-12  1 
02  02-APR-12  1 
03  05-APR-12  1 
01  10-APR-12  2 
02  11-APR-12  2 
03  15-APR-12  2 
01  20-APR-12  3 

Есть ли способ сделать это в Oracle SQL? Или мне нужно выплюнуть его на язык сценариев и взять его оттуда?

Спасибо!

+0

Мне кажется, вам нужен курсор для этого – ControlAltDel

+0

Вот что я думал. Я никогда не писал петлю курсора и не мог найти документацию о том, как это сделать с учетом этой цели. Какие-либо предложения? – DNadel

ответ

3

Похоже, что вы хотите, аналитическую функцию rank

SELECT uid, timestamp, rank() over (partition by uid order by timestamp) rnk 
    FROM your_table 

Если может быть связи (две строки с одинаковыми UID и Timestamp), а затем, в зависимости от того, как вы хотите обрабатывать связи, вы можете захотеть, dense_rank или row_number вместо аналитической функции.

+0

Святая моля это совершенный. Спасибо за помощь. Я знал, что там есть аналитическая функция, где-то делать то, что я хотел, но из мира MySQL/MSSQL. Я не привык к тому, что мне нужны встроенные ответы. Еще раз спасибо! – DNadel

-1

На всякий случай кто-то другой сталкивается с этим, RANK, DENSE_RANK, ROW_NUMBER также доступны в MSSQL.

+0

Это не связано с вопросом вообще, что касается Oracle. –

 Смежные вопросы

  • Нет связанных вопросов^_^