2012-11-14 4 views
4

테이블에서 연속 된 값의 그룹을 가져 오려고합니다. 나는 이것에 대한 예를 찾으려고 노력하고 있지만 내 경우에는 그것을 사용할 수 없었습니다.최소값과 최대 값으로 식별되는 그룹에서 연속 값 가져 오기

이것은 내가 가지고있는 테이블의 작은 부분입니다. 내가 기대하고있어

CardID  CardSerial     CardStateID AssignUserID Denomination 
    ----------- --------------------------- ----------- ------------ ------------- 
    2685680  214026002     3   81   10 
    2685681  214026003     3   81   10 
    2685682  214026004     3   81   10 
    2685683  214026005     3   81   10 
    2685684  214026006     3   81   10 
    2685778  214026100     3   81   10 
    2685779  214026101     3   81   10 
    2685780  214026102     3   81   10 
    2685781  214026103     3   81   10 
    2685782  214026104     3   81   10 
    2685878  214026200     3   81   10 
    2685879  214026201     3   81   10 
    2685880  214026202     3   81   10 
    2685881  214026203     3   81   10 
    2685882  214026204     3   81   10 
    2685883  214026205     3   81   10 
    2685884  214026206     3   81   10 

결과는 다음과 같습니다

min value  max value  cant  Den 
    --------------- --------------- -------- ---- 
    214026002  214026006  5  10 
    214026100  214026104  5  10 
    214026200  214026206  7  10 

나를 위해 어려운 부분은

select min(cardSerial), max(cardSerial), count(*), Den 
from Cards 
group by Den, GROUPING_VALUE_GENERATED 
+0

그런데'GROUPING_VALUE_GENERATED'은 무엇 그룹에 의미있는 무언가를 제공하는 방법


? –

+0

어떤 데이터 유형이'cardSerial'입니까? – MatBailie

답변

3

같은 쿼리가 cardSerial이라고 가정 할 그룹 값을 얻을 수 있습니다 INT 또는 기타 숫자 데이터 유형 ...

WITH 
    sequenced AS 
(
    SELECT 
    ROW_NUMBER() OVER (PARTITION BY Denomination ORDER BY cardSerial) AS sequence_id, 
    * 
    FROM 
    Cards 
) 
SELECT 
    min(cardSerial), 
    max(cardSerial), 
    count(*), 
    Denomination 
FROM 
    Sequenced 
GROUP BY 
    Denomination, 
    cardSerial - sequence_id 
ORDER BY 
    Denomination, 
    cardSerial - sequence_id 

숫자 데이터 유형이 아닌 경우 적절하게 큰 숫자 데이터 유형으로 변환하여 cardSerial - sequence_id이 작동하도록 허용하십시오. cardSerial - sequence_id 계산에 의해 ...

214026002 - 01 = 214026001 
214026003 - 02 = 214026001 
214026004 - 03 = 214026001 
214026005 - 04 = 214026001 
214026006 - 05 = 214026001 
214026100 - 06 = 214026094 
214026101 - 07 = 214026094 
214026102 - 08 = 214026094 
214026103 - 09 = 214026094 
214026104 - 10 = 214026094 
214026200 - 11 = 214026189 
214026201 - 12 = 214026189 
214026202 - 13 = 214026189 
214026203 - 14 = 214026189 
214026204 - 15 = 214026189 
214026205 - 16 = 214026189 
214026206 - 17 = 214026189 
+0

대단히 감사합니다 !!! 당신은 그것을 아주 좋은 방법으로 자세하게 만들었습니다 !! 고마워! :) 그건 그렇고 ... CardSerial 그것은 int 칼럼 그래서 논리가 아주 잘 맞는! – user1257292

관련 문제