본문 바로가기
분석/데이터분석

[BigQuery] 최신의 데이터를 가져오는 3 가지 방법

by 여우요원 2024. 12. 9.

먼저, 아래와 같은 데이터가 있다고 가정을 합니다.

 

A 파트의 데이터가 우리가 갖고 있는 user_id 기준으로 중복이 있는 tbl_user 라는 테이블입니다.

B 파트는 우리가 사용하고자 하는 user_id 기준으로 최신의 정보만 있는 "만들려고 하는 테이블" 입니다.

 

방법 1

첫번째 방법은 사용자(user_id)별로 updated_at 기준으로 번호를 생성하고, 최신의 데이터를 가져오는 방법입니다.

with
user_info as (
    select user_id
        , name
        , phone
        , address
        , hobby
        , row_number() over(partition by user_id order by updated_at desc) as ranking
    from tbl_user
)
select * except(ranking)
from user_info
where ranking = 1

 

방법 2

두번째 방법은 사용자(user_id)로 그룹핑을 하고, 사용자별로 생기는 여러 값의 배열에서 최신 값을 가져오는 방법입니다.

select user_id
    , ARRAY_AGG(name ORDER BY updated_at desc)[OFFSET (0)] as name
	, ARRAY_AGG(phone ORDER BY updated_at desc)[OFFSET (0)] as phone
	, ARRAY_AGG(address ORDER BY updated_at desc)[OFFSET (0)] as address
	, ARRAY_AGG(hobby ORDER BY updated_at desc)[OFFSET (0)] as hobby
from tbl_user
group by user_id

 

방법 3

세번째 방법은 any_value 라는 펑션을 사용하는 방법입니다.

SELECT
  u.user_id
  , ANY_VALUE(u HAVING MAX(updated_at)).* EXCEPT (
    user_id
  )
FROM tbl_user u 
GROUP BY u.user_id

 

 

'분석 > 데이터분석' 카테고리의 다른 글

그룹별로 랜덤 sampling 하기  (0) 2024.08.27
피처 스케일링 (Feature Scaling)  (0) 2024.05.22
머신러닝에서 인코딩 방법  (0) 2024.05.22
회귀모델의 성과 측정  (0) 2024.05.22
Recursive Query (재귀쿼리)  (0) 2024.03.12