我有一些数据采用此sqlfilddle中描述的格式:http://sqlfiddle.com/#!4/b9cdf/2
基本上是一个包含用户ID和事件发生时间的表。我想做的是根据用户发生的时间来计算事件。所以,表格看起来像:
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 :(得分:3)
看起来您需要分析函数rank
SELECT uid, timestamp, rank() over (partition by uid order by timestamp) rnk
FROM your_table
如果可以存在关联(两行具有相同的UID
和Timestamp
),那么,根据您想要处理关系的方式,您可能需要dense_rank
或{{1而是分析函数。
答案 1 :(得分:-1)
万一其他人遇到此问题,RANK,DENSE_RANK,ROW_NUMBER也可以在MSSQL中使用。