안녕하세요..
SQL 2000 싸용중인데요..
쿼리문을 만들려고 하니 잘 않되서요.ㅠ..ㅠ
A 라는 테이블이 있습니다..
그 테이블에 데이터 내용은 ..
번호 SEQ TT
11111 10 AA 0 ....
11111 20 AA 0 ....
11111 30 AA 0 ....
11111 90 AA 0 ....
22222 10 AA 0 ....
22222 20 AA 0 ....
22222 30 AA 0 ....
33333 10 AA 0 ....
33333 20 AA 0 ....
33333 30 AA 0 ....
33333 90 AA 0 ....
이런 식으로 데이터가 무지 많이 들어가 있습니다.
근데 제가 개발한 프로그램에서 버그가 있어서..
특정 레코드에 "90"이라는 데이터가 바져 버렸습니다.
아무래도 쿼리로 찾아서 Insert 해야 할꺼 같은데 쿼리를 만들 방법을 모르겠네요..
제가 저 위에서 찾고자 한 데이터는
22222 30 AA 0
이라는 데이터 입니다.
요거만 "90"이라는 SEQ 가 없죠
SEQ 에 "90" 없는 것만 끌고 와서 그중에 SEQ 가 가장 큰 데이터만 끌고 오고 싶습니다.
제가 말한 조건이 충족되면
22222 30 AA 0 <- 이 데이터가 나옵니다..
그럼 부탁 들립니다.. ^^
간단하게 정리하면,
일단, 90보다 큰 SEQ가 있는 것은 FILTER하고,
FILTER된 값중에 가장큰값을 보여주면 되는 것이라고 생각되네요..
GROUP BY HAVING절로 쉽게 풀이가 되겠습니다.
[제안한 SQL]
먼저, INDEX가 어떤 FIELD에 걸려 있는지 모르는 관계로
좀 좋지 않는 PLAN이 생성될 수 있음을 먼저 달려 드립니다..
(INDEX가 번호,SEQ에 결합INDEX로 되어 있다면,
TABLE명 옆에 INDEX를 사용하게끔 HINT를 주시면, 잘 될꺼라 생각됩니다.)
SELECT *
FROM A
WHERE (번호,SEQ) IN (SELECT 번호, MAX(SEQ)
FROM A
GROUP BY 번호 HAVING MAX(SEQ) < 90)
답이되었길 바랍니다..
ps.
Oracle이면 좀 가뿐하게 나올 것 같기도 하군요.. (*^^*)
물론, 적당히 hint를 사용해야만 하겠지만요..