2017-02-14 3 views
-2

테이블에서 가장 빈번한 값을 얻는 방법 :내가 MS 나는 수백만 행이있는 테이블이 서버 2010 SQL,이 같은 것을 사용

Number  | SITE |Events_Work |Events_Nonwork 
---------- | -------- | --------- | ------------ 
1234567  | 1508  | 1   | 4 
1234567  | 8263  | 1   | 0 
1234567890 | 1905  | 0   | 1 
1234567890 | 1697  | 0   | 0 
1234567890 | 1697  | 1   | 0 
22222222 | 2151  | 2   | 2 
22222222 | 1905  | 3   | 1 
22222222 | 1575  | 0   | 0 
22222222 | 1575  | 4   | 1 
1234567  | 1475  | 0   | 0 
1234567  | 1110  | 0   | 0 
1234567  | 1508  | 0   | 0 

그리고 난 모든 위해 가장 많이 사용되는 사이트를 발견해야 다른 수 기반 : 작업 시간의 이벤트 합계 (Events_Work) 및 평준화 수의 합계 Non_work_time (Events_Nonwork).

어떻게해야할까요?

+1

SQL Server ** 2010 ** 없음 - 우리는 2000, 2005, 2008, 2008 R2, 2012, 2014 및 2016을가집니다. –

답변

0
with tmp1 as (
    select Number, Site, eventsw + eventsNW total 
    from YourTable 
    group by Number, Site, eventsw + eventsNW 
) 
select Number, Site, max(total) 
from tmp1 
group by Site, Number 

내가 당신의 질문을 이해하는 경우를 이것은 당신이 원하는 것이어야합니다.

0

시도는 상단 창 기능을 사용하여 각 번호에 대한 사이트를 위 얻을에 각각의 수와 순위의 각 사이트에 대해 두 열의 합을 찾는 :

select * 
from (
    select t.*, 
     rank() over (
      partition by number order by s desc 
      ) rnk 
    from (
     select t.*, 
      sum(coalesce(events_work, 0) + coalesce(events_nonwork, 0)) over (
       partition by number, 
       site 
       ) s 
     from your_table t 
     ) t 
    ) t 
where rnk = 1; 
관련 문제