본문 바로가기

프로그래밍/MSSQL 정리필요

[MSSQL 연습] 오름차순으로 정렬하되, 같은 이름은 묶기

반응형
문제

해당 데이터를 날짜컬럼(CreDate)을 기준으로 오름차순으로 정렬하되, Name컬럼의 값이 동일한 데이터는 묶어서 보여주자

즉, 가장 작은 날짜를 가진 데이터를 최 상단에 보여주고
해당 데이터의 Name 값과 동일한 데이터가 있다면!
그 데이터가 다음 ROW에 보여진다. (다수일 경우 해당 데이터끼리 오름차순)

해당 Name의 데이터를 모두 나타낸 후
다른 Name 값 중에서 가장 작은 날짜가 다음 ROW가 된다.

이하 반복..


원본 데이터

 IDX

Name 

CreDate 

 1 

 A

 2017-01-01

2

 C

 2017-01-02

3

 C

 2017-01-03

4

 A

 2017-01-03

5

 B

 2017-01-03

6

 B

 2017-01-04

7

 C

 2017-01-04



원하는 결과


 IDX

Name 

CreDate 

 1 

 A

 2017-01-01

4

 A

 2017-01-03

2

 C

 2017-01-02

3

 C

 2017-01-03

7

 C

 2017-01-04

5

 B

 2017-01-03

6

 B

 2017-01-04





정답 쿼리


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT B.IDX, B.Name, B.CreDate
FROM
(
    SELECT *, ROW_NUMBER() OVER(ORDER BY IDX ASC) AS 'row2'
    FROM
    (
        SELECT MIN(IDX) AS 'IDX', Name
        FROM #TABLE1
        GROUP BY Name
    ) A
) A
INNER JOIN 
(
    SELECT ROW_NUMBER() OVER (PARTITION BY Name ORDER BY IDX ASC) AS 'row'* 
    FROM #TABLE1
) B ON A.Name = B.Name
ORDER BY A.row2, B.row ASC
cs




반응형