두 개의 테이블 users 와 login_track이 있습니다. 각 사용자는 login_track 테이블에 로그인 레코드가있을 수도 있고 없을 수도 있습니다. 각 사용자에 대해 최근 2 개의 로그인 날짜를 검색하고 싶습니다.
테이블 구조는 다음과 같습니다. 사용자 :
user_id name
1 John
2 Mike
3 Anderson
4 William
.....
Login_track 테이블 :
track_id user_id login_date
100 1 2017-06-20
101 1 2017-06-21
102 2 2017-06-21
103 1 2017-06-23
104 2 2017-06-23
105 1 2017-06-27
따라서 원하는 결과는 다음 과 같아야합니다 .
user_id Name login_date
1 John 2017-06-27, 2017-06-23
2 Mike 2017-06-23, 2017-06-21
3 Anderson NULL
4 William NULL
참고 : 사용자 ID 3 (Anderson) 및 4 (William)는 login_track 테이블에 레코드가 없습니다.이 두 가지는 최종 결과에도 login_date 열에 NULL 값으로 나열되어야합니다.
감사.
MySQL에는 ROW_NUMBER () 함수가 없기 때문에 약간 까다 롭습니다. 따라서 간단한 트릭으로 다음을 시도하십시오.
Select u.user_id, u.name, GROUP_CONCAT(DISTINCT iq.login_date) login_date
FROM(
select user_id, login_date
from
(
select user_id, login_date,
(@num:=if(@group = user_id, @num +1, if(@group := user_id, 1, 1))) row_number
from Login_track
CROSS JOIN (select @num:=0, @group:=null) c
order by user_id, login_date DESC
) as x
where x.row_number <= 2
)iq
right join users u on u.user_id = iq.user_id
GROUP BY u.user_id
출력 :
user_id name login_date
------- ---- -----------
1 John 2017-06-23,2017-06-27
2 Mike 2017-06-21,2017-06-23
3 Anderson NULL
4 William NULL
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다