2017-12-19 12 views
1

에 의해 그룹과 SQL하지만 난 모든 회원에 대한 일련 번호가 필요 :ROWNUM 내가 회원들에 의해 정보 그룹 및 만료 날짜를 검색하는 쿼리를 구축 할 필요가

 
Number Member ExpDate 
1   A 01/01/2020 
2   A 02/01/2020 
3   A 03/01/2020 
1   B 01/01/2020 
1   C 01/01/2020 
2   C 02/01/2020 

내 쿼리가 지금 :

SELECT ROW_NUMBER() OVER(ORDER BY TRUNC(EXPIRATION_DT) ASC) AS SEQUENCE, MEMBER_ID AS MEMBER, SUM(ACCRUALED_VALUE) - SUM(USED_VALUE) AS POINTS, trunc(EXPIRATION_DT) AS EXPDATE 
FROM TABLE1 
WHERE EXPIRATION_DT > SYSDATE AND EXPIRATION_DT < SYSDATE + 90 
GROUP BY MEMBER_ID, TRUNC(EXPIRATION_DT) 
HAVING SUM(ACCRUALED_VALUE) - SUM(USED_VALUE) > 0 
ORDER BY 4 ASC; 
회원은 "A"가 만료 3 개 레코드가 "B"는 단지 1 및 "C"이 가지고있는 경우

는,이 같은 결과를 필요

는하지만 ' "그룹"일련 번호를 기울인다 .... 결과는 지금 :

 
Seq Mem Points Date 
1 1-O 188 2018-03-01 00:00:00 
2 1-C 472 2018-03-01 00:00:00 
3 1-A 485 2018-03-01 00:00:00 
4 1-1 267 2018-03-01 00:00:00 
5 1-E 500 2018-03-01 00:00:00 
6 1-P 55 2018-03-01 00:00:00 
7 1-E 14 2018-03-01 00:00:00 
+0

실제 결과에서 'Mem' 열은 무엇이고 어떻게 "A", "B", "C"로 변환합니까? – Dmitry

+0

A, B 또는 C는 가능한 값의 예입니다 ... – LPS

답변

1

나는 당신이 DENSE_RANK 창 기능을 필요가 있다고 생각합니다. 이것을 시도해보십시오 -

SELECT DENSE_RANK() OVER (PARTITION BY MEMBER ORDER BY TRUNC(EXPIRATION_DT) ASC) AS SEQUENCE 
     ,MEMBER_ID AS MEMBER 
     ,SUM(ACCRUALED_VALUE) - SUM(USED_VALUE) AS POINTS 
     ,trunc(EXPIRATION_DT) AS EXPDATE 
FROM TABLE1 
WHERE EXPIRATION_DT > SYSDATE AND EXPIRATION_DT < SYSDATE + 90 
GROUP BY MEMBER_ID 
     ,TRUNC(EXPIRATION_DT) 
HAVING SUM(ACCRUALED_VALUE) - SUM(USED_VALUE) > 0 
ORDER BY 4 ASC; 
+0

작동합니다. 감사!! :) – LPS

관련 문제