Ранжирование / подсчет строк на основе значения столбца


У меня есть некоторые данные в формате, описанном в этом sqlfilddle: http://sqlfiddle.com/#!4 / b9cdf/2

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

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? Или я должен выплюнуть его на скриптовый язык и взять оттуда?

Спасибо!

2 3

2 ответа:

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

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

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

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