2014-03-26 5 views
1
가장 최근

제외하고 액세스 테이블의 모든 레코드를 삭제하는 방법 : 나는 최신 이름을 제외한 모든 기록을 삭제하려면내가 같은 테이블이 어떻게

 
name - log - date  - dataFields  
john - 2 - 21/03/2014 - 123 
john - 2 - 22/03/2014 - 345 
john - 2 - 23/03/2014 - 234 
karl - 2 - 20/03/2014 - 789 
liam - 1 - 20/03/2014 - 135 
liam - 2 - 21/03/2014 - 321 
mick - 1 - 20/03/2014 - 987 
mick - 1 - 21/03/2014 - 123 
mick - 2 - 22/03/2014 - 456 
mick - 3 - 20/03/2014 - 789 
mick - 3 - 24/03/2014 - 456 

이/조합 로그. 그래서 내가 남긴 예제

 
john - 2 - 23/03/2014 - 234 
karl - 2 - 20/03/2014 - 789 
liam - 1 - 20/03/2014 - 135 
liam - 2 - 21/03/2014 - 321 
mick - 1 - 21/03/2014 - 123 
mick - 2 - 22/03/2014 - 456 
mick - 3 - 24/03/2014 - 456 

나는 유지하고 싶은 레코드를 선택하는 하위 쿼리를 사용해 보았습니다. 그런 다음 삭제할 레코드를 선택하려면 존재하지 않지만 레코드를 선택하지는 마십시오. 이런 식으로 존재하지 않아도 될까요?

+0

여기에 ID 열이 없습니까? – Alexander

+0

아니요 - 아니요 고유 ID - 키는 이름/로그/날짜입니다. –

답변

1

는 않을 것이다 :

Delete from [TableName] as T1 
Where Exists(
SELECT [log],[name],Max([date]) FROM [TableName] 
Where [log] = T1.[log] 
And [name] = T1.[name] 
Group By [log],[name] 
Having T1.[date] < Max([date])) 

트릭을 수행 하시겠습니까?

+0

"검색어에 적어도 하나의 대상 입력란이 있어야합니다"라고 표시되어 있습니까? –

+0

Select *가 문제의 원인 일 수 있습니다. 편집 된 답변을 시도하십시오 – parakmiakos

+0

삭제 시도 *에서 ... 작동했습니다! 감사 –

0

감사합니다. Alexander,하지만 create table이 작동하지 않았습니다. 그래서 내가 한 것은 각 이름/로그 그룹에 대해 최대 (날짜)를 반환하는 하위 쿼리를 만드는 것입니다. 그런 다음 원본 테이블의 name/log/date에 대한 왼쪽 조인이있는 다른 쿼리에서이 하위 쿼리를 사용했습니다. 이름이 null입니다 그냥 원래의 테이블에서 레코드를 삭제 (나중에 레코드가 거기에 있기 때문에 즉, 같은 이름의 하위 쿼리에 일치하는 레코드가 없습니다/날짜/로그)

관련 문제