안녕하세요.
저는 앱 회사에서 데이터 분석을 맡고 있는 비개발자입니다....
분석용 데이터를 뽑다가 막히는 부분이 있어 가입을 하자마자 염치 없이 질문부터 하게 되었네요... ㅜ ㅜ
다름이 아니라, 저는 mysql 5.7에서 lag 함수를 구현하고 싶습니다. data set은 다음과 같이 준비되어 있습니다.
user_id
|
로그인 일자 |
1 | 2021.03.01 |
1 | 2021.03.02 |
2 | 2021.03.02 |
2 | 2021.03.04 |
1 | 2021.04.06 |
4 | 2021.01.01 |
4 | 2021.03.01 |
2 | 2021.01.19 |
저는 user_id와 로그인 일자를 기반으로, 해당 user_id가 로그인 일자 이전에 가장 최근 로그인한 일자가 언제인지 알고 싶습니다.
user_id | 로그인 일자 | 기준 로그인 이전의 최근 로그인 일자 |
1 | 2021.03.01 | null |
1 | 2021.03.02 | 2021.03.01 |
2 | 2021.03.02 | 2021.01.19 |
2 | 2021.03.04 | 2021.03.02 |
4 | 2021.01.01 | null |
4 | 2021.03.01 | 2021.01.01 |
머리를 아무리 굴려도 해답이 나오지 않습니다.
도움을 주시면 감사드리겠습니다 ㅠㅠ
-- 1. Self Join -- SELECT a.user_id , a.login_dt , MAX(b.login_dt) leg_dt FROM t a LEFT OUTER JOIN t b ON a.user_id = b.user_id AND a.login_dt > b.login_dt GROUP BY a.user_id, a.login_dt ;
-- 2. @변수 사용 -- SELECT user_id , login_dt , lag_dt FROM (SELECT user_id , login_dt , CASE WHEN @id = user_id THEN @dt END lag_dt -- , IF(@id = user_id, @dt, null) lag_dt , @dt := login_dt , @id := user_id FROM t ORDER BY user_id, login_dt ) a ;
-- 3. 스칼라서브쿼리 -- SELECT user_id , login_dt , (SELECT login_dt FROM t b WHERE b.user_id = a.user_id AND b.login_dt < a.login_dt ORDER BY login_dt DESC LIMIT 1 ) lag_dt FROM t a ORDER BY user_id, login_dt ;