2012-05-16 6 views
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에서이 작업을 수행 할 방법이 있습니까? 아니면 스크립팅 언어로 침을 뱉어 거기에서 가져와야합니까?

감사합니다.

+0

커서가 필요하다고 생각합니다. – ControlAltDel

+0

그게 제가 생각한 것입니다. 필자는 커서 루프를 작성한 적이 없으며 이러한 유형의 목표를 염두에두고 문서를 찾는 데 어려움이있었습니다. 어떤 제안? – DNadel

답변

3

그것은 당신이 분석 기능을 원하는처럼 관계 후 (같은 UIDTimestamp 두 행)이있을 경우 rank

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

, 당신은 관계를 처리하는 방법에 따라, 당신은을 할 수 있습니다 보인다 dense_rank 또는 row_number 분석 함수.

+0

거룩한 몰리 이것은 완벽합니다. 도와 주셔서 감사합니다. 거기에 내가 원하는 것을 정확히 수행 할 수있는 분석 함수가 있다는 것을 알았지 만 MySQL/MSSQL의 세계에서 왔기 때문에 내가 필요로하는 대답을하는 데 익숙하지 않았습니다. 다시 한번 감사드립니다! – DNadel

-1

누군가 다른 사람이이 문제를 겪는 경우를 대비하여 RANK, DENSE_RANK, ROW_NUMBER도 MSSQL에서 사용할 수 있습니다.

+0

이것은 오라클에 관한 질문과 전혀 관련이 없습니다. –