저는 SQL을 처음 접했고 내가 잘못하고있는 것을 찾을 수 없었습니다. 동일한 행에있는 유일한 ID와 연도가 남아 있도록 임시 테이블에 대해 동일한 테이블의 다른 행과 2 개의 특정 열에 일치하는 필드가있는 행을 삭제하려면 노력하고있어 남아있는 행이 그 해의 ID에 대한 최대 날짜입니다.SQL 행은 존재하지 않는 곳에서 사용할 때 테이블에서 삭제되지 않으며 별개의 하위 쿼리를 선택하십시오.
My table:
ID Year Date
----------------------------------------------------
1 2017 01/05/2017
1 2017 11/17/2017
1 2017 08/07/2017
1 2016 03/22/2017
1 2016 04/01/2017
2 2017 03/12/2017
2 2016 02/03/2016
2 2016 04/19/2016
원하는 결과 :
ID Year Date
----------------------------------------------------
1 2017 11/17/2017
1 2016 04/01/2016
2 2017 03/12/2017
2 2016 04/19/2016
내가 무엇을 가지고 : 나는 그것을 실행하면
DELETE FROM #Temp
WHERE NOT EXISTS (
SELECT DISTINCT
t1.ID,
t1.Year
FROM #Temp AS t1,
#Temp AS t2
WHERE t1.ID = t2.ID
AND t1.Year <> t2.Year
GROUP BY t1.ID, t1.Year)
는 아무 것도 삭제되지 도착하지만 처음 두 행을 제거 할 때 삭제 될 것입니다 무슨 테스트 결과가 정확하므로 혼란 스럽습니다. MAX 함수에 대해 작업하고 있지만이 부분이 먼저 작동하기를 원합니다.
도움이 될 것입니다. 나는 그것이 무엇이 잘못 될 수 있는지 전혀 모른다.
내가 MySQL의 태그를 제거했습니다 ..
ID
에 따라 중복 된 기록을 찾을 수row_number()
기능을 사용하는 것입니다. #table 구문 사용법을 기반으로합니다. –exists 절은 외부 쿼리와 상관 관계가 없습니다. 항상 행을 반환하므로 "존재하지 않음"은 항상 false입니다. 일반적으로 "distinct"의 사용은 종종 쿼리가 논리적으로 결함이 있음을 나타냅니다. 여기에 전혀 목적이 없습니다. 다른 사람들이 게시 한 것처럼 윈도우 기능을 사용하는 방법을 배웁니다. – SMor