Hello,

kok nae-ga ha-myun an-dweneun MAGIC...🧚

웹 프로그래밍

[ MySQL ] 그룹별 최근 n개의 데이터 가져오기

✿도담도담 2020. 3. 13. 18:44

저번엔 가장 최근데이터 가져오기를 짤막하게 포스팅했는데

이번엔 그룹별 최근 데이터를 가져오는 일이 생겼다.

사실 저렇게 해야하는줄 알았는데  어차피 반복문 돌려서 배열을 만들었어야 했지만....

 

 

아래 참고 블로그링크를 걸어 놓겠다.

똑같은 쿼리지만 그래도 내가 글을 적어놓는게 한번 더 기억할거니까 :)

 

헣허... 컬럼이 좀 많지만 다 무시하고 우선 내가 원하는 목표는

eventId로 묶은 그룹별 최신 데이터를 두개만 가져오는 것이었다.

그러니 eventId와 regDate를 사용하게 될 것 같다.

 

 

SELECT *, rnum FROM(
	SELECT a.*,
		(CASE @groupId WHEN a.eventId THEN @rownum:=@rownum+1 ELSE @rownum:=1 END) AS rnum,
		(@groupId:=a.eventId) groupId
	FROM product_event_items_log AS a
	ORDER BY a.eventId, a.regDate
) AS LOG
WHERE rnum <=2 

최종 쿼리문이다. 내가 또 @이친구는 처음봤다...🙀 @변수명 으로 사용한다.

사실 처음봤을때 분석하기 싫었다. 그냥 복붙하고 싶게 생겼다...ㅠㅠ

 

그래도 차근차근 :)

 

처음엔 SELECT * FROM ( ) AS log 까지만 써주고 천천히 직접 써내려갔다.

(CASE @groupId WHEN a.eventId THEN @rownum:=@rownum+1 ELSE @rownum:=1 END) AS rnum

해당 문장은 rnum이라는 변수를 하나 만들어 준거다.

@groupId가 eventId와 같다면 rownum에 +1 그렇지 않으면 1

 

(@groupId:=a.eventId) groupId

그리고 groupId를 eventId로 초기화

 

 

내가 이해한걸 php로 그려보면 아래와 같은 느낌이었당

$groupId = "";
for($i=0; $i<count($list); $i++){

    if( $groupId == $list[i]['eventId'] ){
        $rownum++;
    }
    else{
        $rownum = 1;
    }

    groupId = $list[i]['eventId'];
}

다음에 또 쓰일 일이 있을것 같아 포스팅 하구 간다.

그럼 이만 뿅! 금요일을 마무리하고 주말을 보내러 가겠다 ㅎㅎ

 

 

참고 블로그 : https://blackbull.tistory.com/43