2017-04-24 5 views
0

BiqQuery에서 visitNumber의 최대 값만 반환해야하는 다음 쿼리가 있습니다.MAX 함수 사용 - BigQuery

SELECT 
fullvisitorid, 
max(VisitNumber), 
NTILE(10) OVER (order by visitnumber DESC) ntile, 
FROM 
[data] 
GROUP BY fullvisitorid,visitnumber 

는 현재, 나는이 얻을 : 반면

Row fullvisitorid  f0_ ntile 
1 5525864130868838188 8371 1  
2 5525864130868838188 8370 1  
3 5525864130868838188 8369 1  
4 5525864130868838188 8368 1  
5 5525864130868838188 8367 1  
6 5525864130868838188 8366 1  
7 5525864130868838188 8365 1 

내가 원하는 원하는 것은 fullvisitorid이 즉에만 최대 visitnumber입니다. 나는이 접근 것

Row  fullvisitorid  f0_ ntile 
    1 5525864130868838188 8371 1 
    2 1450600973472850688 7461 1 
    3 6249134003569839962 6914 1 
    4 3072340487595905048 6828 1 

답변

1

방법은 각 fullvisitorid 파티션의 방문 번호로 순위를 할당 할 ROW_NUMBER()을 사용하는 것입니다. 그런 다음 각 파티션에서 첫 번째 레코드 만 유지하십시오. 동점의 경우 DENSE_RANK()은이 경우 여러 레코드와 일치합니다.

SELECT 
    t.fullvisitorid, 
    t.VisitNumber, 
    t.ntile 
FROM 
(
    SELECT 
     fullvisitorid, 
     VisitNumber, 
     DENSE_RANK() OVER (PARTITION BY fullvisitorid ORDER BY VisitNumber DESC) dr, 
     NTILE(10) OVER (ORDER BY visitnumber DESC) ntile 
    FROM [data] 
) t 
WHERE t.dr = 1