안녕하세요. 쿼리문을 짜다가 도저히 머리가 터질것 같아 도움을 요청 드립니다..
첨부드린 스크린샷 같은 데이터가 있을때 각 user_Id별로 항목별 가장 최근에 수정된 값(공백인 애들은 제외)들을 한개의 로우로 나오게 하고 싶습니다.
얻고 싶은 값은
| USER_ID | PHONE_NUM | ADDRESS | BIRTH_DATE | |
| 1 | 001 | 01011223344 | 서울 | 20230320 |
| 2 | 002 | 01088889999 | 울산 | 20001010 |
이렇게 얻고 싶습니다! 머리가 터질것 같습니다..!
-- mysql 8.x 버전인 경우
select distinct user_id,
first_value(phone_num) over (partition by user_id order by phone_num is null, date_time desc) phone_num,
first_value(address) over (partition by user_id order by address is null, date_time desc) address,
first_value(birth_date) over (partition by user_id order by birth_date is null, date_time desc) birth_date
from data_table;
와 이렇게 간단하게 되는군요... 한수 배워갑니다.. 감사합니다!!
--조인
SELECT t1.user_id, t1.phone_num, t1.address, t1.birth_date
FROM table t1
INNER JOIN (
SELECT user_id, MAX(date_time) AS max_date_time
FROM table
GROUP BY user_id
) t2 ON t1.user_id = t2.user_id AND t1.date_time = t2.max_date_time
--분석함수
SELECT user_id, phone_num, address, birth_date
FROM (
SELECT user_id, phone_num, address, birth_date,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY date_time DESC) AS row_num
FROM table
) AS t1
WHERE row_num = 1;
분석함수를 써볼 생각을 못했네요.. 감사합니다!!