2011-07-18 5 views
1

table_1어떻게 MySQL의 레코드를 삭제하고 나는이 기록을 삭제하려면 어떻게 최신 날짜

ID Email   Answer UpdateDate 
1 [email protected] 1  2011-07-02 
2 [email protected] 3  2011-07-11 
3 [email protected] 3  2011-07-12 
4 [email protected] 5  2011-07-13 
5 [email protected] 5  2011-07-14 
6 [email protected] 4  2011-07-14 
7 [email protected] 4  2011-07-14 
8 [email protected] 4  2011-07-15 

을 유지하지만, 최신 UpdateDate

그리고 결과 보관하지 :

ID Email   Answer UpdateDate 
4 [email protected] 5  2011-07-13 
7 [email protected] 4  2011-07-14 
8 [email protected] 4  2011-07-15 
+0

글쎄, 그 결과는 ID가가는 한 옳지 않을 것입니다; ID는 변경되지 않습니다. 결과의 ID는 '5'와 '4'이어야합니다. –

+0

신분증에 대해 Delan Azabani에게 감사드립니다. 편집 됨 – hmmmm

+0

정확히 무엇을 보관하고 싶습니까? 가장 최근 날짜일까요? 각 이메일 주소에 대해 가장 최근의 이메일 주소는 무엇입니까? 각 답변 값의 가장 최근 값? 또는 다른 것? –

답변

-1

당신은 가장 높은 날짜를 저장하기 위해 임시 변수를 사용할 수 있으며, 별도의 쿼리가 모든 것을 삭제하는 그것보다 <입니다. 변수는 연결에 따라 다릅니다.

select max(UpdateDate) from table_1 into @TempUpdateDate 

delete from table_1 where UpdateDate < @TempUpdateDate 
+0

감사합니다. Steve ..이 코드는 작동하지만 일부 데이터는 최신 날짜를 유지하지 않고 삭제됩니다. – hmmmm

+0

이것은 여전히 ​​다른 대답과 같은 논리적 오류를 가지고 있습니다. 각 전자 메일 주소는 * 해당 전자 메일 주소의 최신 레코드를 유지해야합니다. 각 이메일 주소의 마지막 이메일 주소가 다른 날짜이므로 임시 변수를 사용할 수 없습니다. – MatBailie

2

을 상관 하위 쿼리에 대해 UpdateDate를 확인합니다.

CREATE TEMPORARY TABLE 
    latestRecord (
    Email  VARCHAR(128), 
    updateDate DATETIME 
) 
INSERT INTO 
    latestRecord 
SELECT 
    Email, 
    MAX(updateDate) AS updateDate 
FROM 
    table_1 
GROUP BY 
    Emal 

DELETE 
    table_1 
FROM 
    table_1 
INNER JOIN 
    latestRecord 
    ON latestRecord.Email  = table_1.Email 
    AND latestRecord.updateDate < table_1.updateDate 

편집

같은 논리의 또 다른 리팩토링

+0

내가 1064를 얻었습니다 - SQL 구문에 오류가 있습니다. – hmmmm

+0

맨 위 줄에 "FROM"을 입력하지 않았습니다. –

+0

FROM 절 – hmmmm

-1

이 UpdateDate는 DATETIME 필드 있는지 확인합니다.

각 답변 값의 최신 UpdateDate를 유지 하시겠습니까?

delete from table_1 where UpdateDate not in (select max(UpdateDate) from table_1 group by Answer); 

만 다음 최신 날짜를 유지하려는 경우 :이 있다고 할 것이다 다음

delete from table_1 where UpdateDate not in (select max(UpdateDate) from table_1); 
+0

스티브에게 감사드립니다. 나는 1093을 가지고있다 - FROM 절의 업데이트를 위해 목표 테이블 'table_1'을 지정할 수 없다 – hmmmm

+0

그는 사용자 (전자 메일 주소)별로 최신 대답을 원한다. 'NOT IN'에 대한 사용은 각 사용자가 보관할 날짜가 하나뿐이기 때문에 여기서는 작동하지 않으며 사용자마다 다를 수 있습니다. (이 구문 문제도 살펴 보겠습니다.) – MatBailie