3

この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でこれを行う方法はありますか?それとも、スクリプト言語に吐き出してそこから取り出す必要がありますか?

ありがとう!

4

2 に答える 2

3

分析関数が必要なようですrank

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

同点(同じUIDとの2つの行Timestamp)が存在する可能性がある場合は、同点の処理方法に応じて、代わりにdense_rankまたはrow_number分析関数が必要になる場合があります。

于 2012-05-16T17:06:47.710 に答える
-1

他の誰かがこれに遭遇した場合に備えて、RANK、DENSE_RANK、ROW_NUMBERもMSSQLで使用できます。

于 2012-08-09T01:24:20.227 に答える