Ранжирование / подсчет строк на основе значения столбца
У меня есть некоторые данные в формате, описанном в этом 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 ответа:
Похоже, вам нужна аналитическая функция
rank
SELECT uid, timestamp, rank() over (partition by uid order by timestamp) rnk FROM your_table
Если могут быть связи (две строки с одинаковыми
UID
иTimestamp
), то в зависимости от того, как вы хотите обрабатывать связи, вы можете использовать вместо них аналитическую функциюdense_rank
илиrow_number
.