mysql 쿼리문 짜는것에서 막혔습니다.. 도와주세요..! 0 4 1,586

by 일우입니담 [SQL Query] MySql [2023.03.20 08:53:58]



안녕하세요. 쿼리문을 짜다가 도저히 머리가 터질것 같아 도움을 요청 드립니다..

첨부드린 스크린샷 같은 데이터가 있을때 각 user_Id별로 항목별 가장 최근에 수정된 값(공백인 애들은 제외)들을 한개의 로우로 나오게 하고 싶습니다.

얻고 싶은 값은
 

  USER_ID PHONE_NUM ADDRESS BIRTH_DATE
1 001 01011223344 서울 20230320
2 002 01088889999 울산 20001010

이렇게 얻고 싶습니다! 머리가 터질것 같습니다..!

by 신이만든지기 [2023.03.20 11:05:21]
-- 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;

 


by 일우입니담 [2023.03.20 11:29:07]

와 이렇게 간단하게 되는군요... 한수 배워갑니다.. 감사합니다!!


by jkson [2023.03.20 11:07:01]
--조인
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;

by 일우입니담 [2023.03.20 11:29:34]

분석함수를 써볼 생각을 못했네요.. 감사합니다!!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입