2010-12-03 2 views
2

일부 임계 값보다 레코드를 가져 오기, 그들에게 계정을 전화주의 :MySQL의 : 다른 필드의 최대 값은 내가 MySQL의에서이 개 테이블을 가지고

Account 
- Id 
- Available (bool) 

Note 
- Id 
- When (DateTime) 
- AccountId (FKey) 

내가 그 계정을 업데이트 할 가장 최근의 메모가 약간의 기준점 (예 : 90 일 전) 이하입니다. SQL에서 내가 좋아하는 뭔가를하고 싶은 (때문에 최대의 작동 방식에 분명히하는 작동하지 않습니다) 다음

UPDATE 
    Account INNER JOIN Note ON Account.Id = Note.AccountId 
SET 
    Account.Available = true 
WHERE 
    Max(Note.When) < DATE_ADD(NOW(), INTERVAL -90 DAY); 

는 사람이 할 수있는 방법을 알고 있나요?

+0

'max()'가 정말로 필요합니까? – Sathya

답변

5

테스트되지 않았지만이 방법이 효과가있을 것이라고 생각합니다.

UPDATE 
    Account 
SET 
    Account.Available = true 
WHERE 
    Id IN(
     SELECT 
      AccountId 
     FROM 
      Note 
     GROUP BY 
      AccountId 
     HAVING 
      Max(Note.When) < DATE_ADD(NOW(), INTERVAL -90 DAY) 
    ); 
+1

+1 당신의 버전에서 INNER JOIN을 수행 할 필요조차 없다고 생각합니다. –

+0

정확합니다. 내부 결합은 필요하지 않습니다. 다시 복사/붙여 넣기 : –

+0

불행히도 where 절에서 집계 함수를 사용할 수 없습니다. (Max (Note.When)) –

관련 문제