[DEV SQL] 6. [MySQL, MariaDB] Select Gruop In Group order by date desc(그룹 안에 그룹 별 날짜 순차정렬)
[MySQL/MariaDB] Select Gruop In Group order by date desc(그룹 안에 그룹 별 날짜 순차정렬)
의도하는 포스팅 내용과 포스팅이 제목이 애매하긴 하지만 우선 작성
예제 테이블
DEPARTMENT(부서)
컬럼 | 컬럼명 |
---|---|
IDX | 부서_idx |
DP_NAME | 부서명 |
EMPLOYEE(직원)
컬럼 | 컬럼명 |
---|---|
IDX | 직원_idx |
DEPARTMENT_IDX | 부서_idx |
POSITION | 직책 |
NAME | 직원명 |
JOIN_DATE | 입사일 |
SELECT 기대 결과
각 부서(그룹)
내 직책(그룹)
별로 입사일(날짜)
이 제일 빠른 직원명을 select 하는 것이다.
물론 실무 테이블은 아니기에 비슷하게 테이블구조와 요구조건을 생각했다.
group by를 date 로 할 경우 기본적으로 오름차순(ASC)이 적용된다.
그래서 내림차순(DESC)으로 select가 필요한 경우가 있어서 하다보니 포스팅을 작성을 하게 되었다.
해당 포스팅이 정답은 아닐 듯 하다…. 아마도 더 좋은 방법이 분명히 존재한다.
부서명 | 직책 | 직원명 | 입사일 |
---|---|---|---|
퍼블팀 | 차장 | 김동일 | 2010-03-10 19:39:57 |
퍼블팀 | 과장 | 이예나 | 2012-02-11 19:39:57 |
퍼블팀 | 대리 | 박민지 | 2016-05-09 19:39:57 |
퍼블팀 | 사원 | 최진실 | 2018-11-13 19:39:57 |
개발팀 | 차장 | 박정아 | 2011-07-11 19:39:57 |
개발팀 | 과장 | 박준석 | 2013-03-14 19:39:57 |
개발팀 | 대리 | 이준여 | 2017-08-11 19:39:57 |
개발팀 | 사원 | 최상민 | 2018-09-24 19:39:57 |
그룹 안에 그룹 별 날짜 순차정렬
SELECT
S1.DEPARTMENT_IDX
, S1.POSITION
, ANY_VALUE( S1.NAME ) AS NAME
, ANY_VALUE( S1.JOIN_DATE ) AS JOIN_DATE
FROM
(
SELECT
E.DEPARTMENT_IDX
, E.DP_NAME
, E.POSITION
, E.NAME
, E.JOIN_DATE
, CASE WHEN @GRP = POSITION THEN @ROWNUM:=@ROWNUM + 1 ELSE @ROWNUM :=1 END AS ROWNUM
, (@GRP := POSITION) as dummy
FROM
EMPLOYEE E
INNER JOIN DEPARTMENT D ON E.DEPARTMENT_IDX = D.IDX
ORDER BY
ROWNUM DESC
) S1
GROUP BY S1.DEPARTMENT_IDX, S1.POSITION
위에 쿼리를 실행하면 아마도 위에 기대결과 Select를 할 것이다.
그럼 전 이만.