안녕하세요. 쿼리를 짜다 막혀서 답을 구하고 있습니다.
ID 별로 2개의 status가 존재 합니다. [30,40]. 하나의 짝으로 존재하는 30과 40은 rownumber로 표현됩니다. 가장 최근 date가 rownumber 1번으로 부여를 받고, 예전 데이타로 갈수록 숫자는 증가합니다.
ID | status | rownumber | date |
a123 | 30 | 1 | 20190102 |
a123 | 40 | 1 | 20190103 |
b123 | 30 | 2 | 20190102 |
b123 | 40 | 2 | 20190103 |
b123 | 30 | 1 | 20190108 |
b123 | 40 | 1 | 20190109 |
c123 | 30 | 2 | 20190111 |
c123 | 30 | 1 | 20190112 |
c123 | 40 | 1 | 20190113 |
d123 | 30 | 1 | 20190114 |
d123 | 40 | 2 | 20190115 |
d123 | 40 | 1 | 20190116 |
상기와 같이 데이타 셑이 있는데, 실수로 30 이 두번 입력되거나 40이 두번 입력 된 경우가 있습니다. 이 짝이 없는 데이타를 뺀 하기와 같은 값을 얻기를 원합니다. 즉 짝이 없는 rownumber를 삭제해야 합니다.
ID | status | rownumber | date |
a123 | 30 | 1 | 20190102 |
a123 | 40 | 1 | 20190103 |
b123 | 30 | 2 | 20190102 |
b123 | 40 | 2 | 20190103 |
b123 | 30 | 1 | 20190108 |
b123 | 40 | 1 | 20190109 |
c123 | 30 | 1 | 20190112 |
c123 | 40 | 1 | 20190113 |
d123 | 30 | 1 | 20190114 |
d123 | 40 | 1 | 20190116 |
고견 부탁 드립니다.
MS SQL 입니다.
CREATE TABLE table_name ( ID char(4) , status int , rownumber int , [date] date ); INSERT table_name (ID, status, rownumber, [date]) VALUES ('a123', 30, 1, '20190102') , ('a123', 40, 1, '20190103') , ('b123', 30, 2, '20190102') , ('b123', 40, 2, '20190103') , ('b123', 30, 1, '20190108') , ('b123', 40, 1, '20190109') , ('c123', 30, 2, '20190111') , ('c123', 30, 1, '20190112') , ('c123', 40, 1, '20190113') , ('d123', 30, 1, '20190114') , ('d123', 40, 2, '20190115') , ('d123', 40, 1, '20190116');
- 삭제 대상 레코드
SELECT ID, rownumber FROM table_name GROUP BY ID, rownumber HAVING COUNT(*) = 1
- 삭제 하기
DELETE T FROM ( SELECT ID, rownumber FROM table_name GROUP BY ID, rownumber HAVING COUNT(*) = 1 ) S INNER JOIN table_name T ON T.ID = S.ID AND T.rownumber = S.rownumber;