3

我有一些在这个 sqlfiddle 中描述的格式的数据: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 中做到这一点?还是我必须将它吐出到脚本语言并从那里获取?

谢谢!

4

2 回答 2

3

看起来你想要分析功能rank

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

如果可以存在关联(两行具有相同的UIDTimestamp),则根据您想要处理关联的方式,您可能需要dense_rankorrow_number分析函数。

于 2012-05-16T17:06:47.710 回答
-1

以防万一其他人遇到这种情况,在 MSSQL 中也可以使用 RANK、DENSE_RANK、ROW_NUMBER。

于 2012-08-09T01:24:20.227 回答