yoursyun
1개 남겨놓고 중복된 행삭제 방법 본문
1. 유일값 컬럼이 없는경우는 강제 생성해줘야한다. ( 남겨놓을 것의 기준점 생성 )
2. mssql, oracle 과 같이 row number 함수를 mysql 에서는 아래와 같이 구현
- 방법은 그룹핑 값과 같은 것들에 대해 각 레코드(행) 마다 비교하여 넘버링
- 이를 통해 그룹의 시퀀스 번호를 작성
- 최종적으로 1을 제외한 나머지 값들의 유일값을 가져오는 쿼리 이다.
select * from 테이블명 where 유일값 in (
select 유일값 from
(
select row_no, 유일값, 그룹핑값
from (
select
a.유일값, a.그룹핑값
, (case @v_그룹핑값 when a.그룹핑값 then
@rownum := @rownum + 1
else @rownum := 1 and @v_그룹핑값 := a.그룹핑값
end) as row_no
from 테이블명 as a
join (select @v_그룹핑값:='', @rownum:=0) as b
order by a.auth_num
) as c
) as d where d.row_no > 1
);
3. 추가 여러개 그룹핑시
row_number 에서 여러행을 그룹핑하여 처리할 때에는 아래와 같이 직관적으로 기술하여 쓴다.
* 변수 사용시 컬럼 순서에 연관이 있으므로 변수에 값을 할당할때 아래와 같이 조건뒤에 변수를 할당한다.
select
a.유일값
, a.그룹핑값1
, a.그룹핑값2
, (case when (@v_그룹핑값1 = a.그룹핑값1
and @v_그룹핑값2) = a.그룹핑값1) then
@rownum := @rownum + 1
else @rownum := 1
end) as row_no
, @v_그룹핑값1 := a.그룹핑값1 as v_그룹핑값1별칭
, @v_그룹핑값2 := a.그룹핑값2 as v_그룹핑값2별칭
from neos.t_ex_card_aq_tmp as a
join (select @v_그룹핑값1:='', @v_그룹핑값2:=0, @rownum:=0) as b
order by a.그룹핑값1