database.sarang.net
UserID
Passwd
Database
DBMS
ㆍMySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MySQL Q&A 31127 게시물 읽기
No. 31127
SQL로 테이블내의 그룹별로 특정 필드가 MAX 값인 값들을 지우고 싶습니다.
작성자
쿼리맨
작성일
2017-09-25 14:52:56
조회수
627

안녕하세요

 

질문 드리고 싶은것은 테이블에서 연도 필드가 MAX값을 갖는 데이터를 지우고 싶습니다. 단, 데이터들은 개인 ID로 GROUP 되어 있고 그 그룹에서 MAX값을 지우는 것입니다.

 

근본적으로 원하는 일은 이력 테이블에서 최신연도의 정보와 과거 정보를 두 테이블로 분리하는 것입니다.

현재 이력 테이블(emp_hist)은 다음과 같습니다.

hist_Year emp_Id emp_Salary
2017 19 2400000
2016 19 2300000
2017 18 2100000
2016 17 2000000
2015 17 1900000
2017 16 2300000
2016 16 2100000

위와 같은 테이블의 값들 중 각 emp_Id로 Group By한 값들 중 MAX(hist_Year)인 데이터들과 나머지를 분리해서 두 테이블에 저장하고자 합니다. (각 emp_Id 별 최신 값과 이력 값을 분리)

 

이를 위해 MAX(hist_Year)인 데이터들을 새로운 테이블(emp_new)에 저장하고 emp_hist에서 새로 저장된 데이터들을 삭제하려고 합니다.

일단 새로운 테이블에는 다음 쿼리를 사용하여 MAX(hist_Year)의 데이터들을 저장하였습니다.

INSERT INTO emp_new (SELECT ehist.* FROM emp_hist AS ehist INNER JOIN (SELECT emp_Id, MAX(hist_Year) AS hist_Year FROM emp_hist GROUP BY emp_Id) AS emax ON ehist.emp_Id = emax.emp_Id AND ehist.hist_Year = emax.hist_Year)

 

그런데 이 데이터들을 삭제하려고 단순히 INSERT INTO 부분을 DELETE FROM으로 바꾸니 에러가 납니다.

 

혹시 방법을 아시는 분들 답변 주시면 감사드리겠습니다.

 

감사합니다.

이 글에 대한 댓글이 총 1건 있습니다.

syntax를 보고 날리셔야합니다..

delete절의 where 부분에 max값을 구한 값들에 서브쿼리를 붙이면 될듯합니다.

김주왕(kimjuking)님이 2017-09-26 09:35:59에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
31128mysql 원격접속 error 2003 질문드립니다..
황재욱
2017-10-16
148
31127SQL로 테이블내의 그룹별로 특정 필드가 MAX 값인 값들을 지우고 싶습니다. [1]
쿼리맨
2017-09-25
627
31126간단한 쿼리문 질문입니다. (두 필드를 더하기) [5]
쿼리초보
2017-09-25
648
31125C언어와 데이터베이스 연동 질문입니다. ㅜ
김지희
2017-09-21
738
31124댓글 테이블 구조는 어떻게 가져가야 좋을까요?
권순환
2017-09-15
877
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2017 DSN, All rights reserved.
작업시간: 0.074초, 이곳 서비스는
	PostgreSQL v9.6.3으로 자료를 관리합니다