2013-10-08 6 views
1

문제점은 두 개의 필드로 테이블과 그룹에서 최대 값을 선택하는 것입니다. 표는 5billion 기록을 말하고, 매우 큰 데이터는 다음과 같이 구성되어있다 :두 필드로 그룹화 된 최대 값

LocationNumber | Event | Value 
      1 |  1 | 10 
      1 |  2 | 20 
      1 |  3 | 30 
      2 |  1 | 20 
      2 |  2 | 50 

내가

LocationNumber | Event | Value 
      1 |  3 | 30 
      2 |  2 | 50 

이 어떤 아이디어로 출력을하고 싶습니다?

SELECT LocationNumber, MAX(Event), Max(value) 
FROM tablename 
GROUP BY LocationNumber 
+0

두 개의 필드로 그룹화 하시겠습니까? 당신의 결과는 그것을 보여주지 않습니다! – sarwar026

+0

원하는 결과를 얻으려면 레코드 수에 관계없이 선택의 여지가 거의 없습니다. 그러나 실제로 필요한 방법을 선택해야합니다. 최대 (이벤트) 및 최대 (값)를 원하십니까 - 또는 - locationNumber 당 가장 높은 이벤트 번호에 해당하는 값을 원하십니까? 이것들은 정확히 똑같은 것이 아닙니다. 성과와 관련하여, 그것은 귀하의 지수 및 통계의 신선도를 포함한 많은 요소들에 달려 있습니다. –

답변

3

그냥 GROUP BY LocationNumber 및 사용 MAX #tbl 그룹 by LocationNumber

이 작업은 가능하지만 약 50 억 개의 레코드가 걱정됩니다. 효과적으로 수행 할 수 있습니까?

0

시도하십시오 :

select 
    LocationNumber, 
    Event, 
    Value 
from(
    select 
     LocationNumber, 
     Event, 
     Value, 
     ROW_NUMBER() over (Partition by LocationNumber order by Event desc, Value desc) RNum 
    From YourTable 
)x where RNum=1 
0

부터

SELECT LocationNumber, MAX(Event), Max(value) 
FROM tablename 
GROUP BY LocationNumber 
0

선택 LocationNumber, MAX (이벤트), MAX (발을) 시도이 같은

+0

귀하의 답변이 한 가지 더 좋은 질문을 제기했습니다. –

관련 문제