Postgresql update 쿼리 질문 0 3 2,607

by 커피는스벅 [SQL Query] DB postgresql [2017.09.06 11:31:13]


postgresql 데이터베이스 초보자 입니다 ㅠㅠ

---USER 테이블---

이름 시간 상태
AAA 2017-08-01 12:00:00 1
BBB 2017-07-01 12:00:00 1
CCC 2017-09-01 12:00:00 1
AAA 2016-12:01 12:00:00 1
BBB 2016-11-01 12:00:00 1

위와 같은 형식의 DB를 최신 날짜기준으로  update 쿼리로 상태를 변경하려고 하는데

막히는 부분이 있어서 질문 남깁니다.

이름 시간 상태
AAA 2017-08-01 12:00:00 1
BBB 2017-07-01 12:00:00 1
CCC 2017-09-01 12:00:00 1
AAA 2016-12:01 12:00:00 0
BBB 2016-11-01 12:00:00 0

제가 하려고 하는 쿼리는 바로 위에 처럼 이름별로 최신날짜 기준을 확인하여

최신 날짜가 아닌 이름의 상태에 대해서 0 으로 변경하려고 합니다.

 

SELECT 이름, max(시간) FROM USER GROUP BY 이름;

 

select 문으로 조회까지는 실행 했는데 update를 하면 오류가 발생합니다 ㅠㅠ

일단 제가 실행했던 쿼리문은

 

update USER set 상태='0'
where (SELECT 이름, max(시간) from USER GROUP BY 이름)!

 

이것처럼 이름 기준 최신날짜가 아닌 것에 대해서 0으로 변경하라는 명령을 내리고 싶은건데

 

ERROR:  subquery must return only one column
LINE 3: where (SELECT 이름, max(시간) from USER...

 

이런 오류가 발생되네요..

어떻게 쿼리문을 짜야 할까요 ㅠㅠ

 

ps. 간단하게 하기 위해서 컬럼을 3개만 작성했으며 컬럼 갯수는 다릅니다

by 호리 [2017.09.06 13:23:56]

저도 pg를 안써봐서 잘은 모르지만, 아래 처럼 하니 원하는대로 update되기는 하네요.

update tbl_user
set status = 0
where (name, reg_date) not in (select name, max(reg_date) as reg_date from tbl_user group by name) ;

 


by 커피는스벅 [2017.09.08 09:15:04]

감사합니다 ㅠㅠ 덕분에 잘 처리했습니다!1


by 주킹 [2017.09.06 13:25:23]

짯는데 다른분이 이미 쓰셨네요 ~

pg도 됩니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입