2012-07-03 2 views
1

lastaccess 날짜가있는 테이블이 유닉스 형식입니다. lastaccess 날짜가 180 일보다 큰 테이블의 모든 레코드를 쿼리하고 싶습니다.이 유형의 SQL 문을 구성하는 방법

이 내 현재 쿼리입니다

나는 NotAccessedIn6Months를 사용할 수 있어야합니다
SELECT id, auth, username, IF(DATEDIFF(NOW(), FROM_UNIXTIME(lastaccess))>=180,'Y','N') As NotAccessedIn6Months 
FROM mdl_user 
WHERE auth = 'manual' 

SELECT id, auth, username, IF(DATEDIFF(NOW(), FROM_UNIXTIME(lastaccess))>=180,'Y','N') As NotAccessedIn6Months 
FROM mdl_user 
WHERE auth = 'manual' AND NotAccessedIn6Months = 'Y' 

같은 결과 집합을 필터링하는 결과를하지만, 후자의 형식은 불법입니다.

감사합니다.

+0

당신이 얻을 정확한 오류 메시지가 무엇 CURRENT_DATECURRENT_TIMESTAMP을 사용할 수 있습니까? – banging

답변

2

당신은 두 가지 옵션이 사용 중 대신 WHERE이 등으로 갖는

SELECT id, auth, username, 
     IF(DATEDIFF(NOW(), FROM_UNIXTIME(lastaccess))>=180,'Y','N') As NotAccessedIn6Months 
    FROM mdl_user 
WHERE auth = 'manual' 
HAVING NotAccessedIn6Months = 'Y' 

... 아니면 그냥 (에이 조건을 이동 당신은하지 않습니다 이 특정 검색어에서 'N'값 표시) :

SELECT id, auth, username 
    FROM mdl_user 
WHERE auth = 'manual' 
    AND DATEDIFF(NOW(), FROM_UNIXTIME(lastaccess)) >= 180 
1

WHERE에서 계산 된 값 별칭이지만 HAVING 절에서 가능합니다. 그러나 HAVING은 쿼리시 필터링하지 않지만 전체 결과 집합에는 필터가 적용되지 않으므로 성능에 영향을 미칩니다.

2

당신이 그것을 결합 할 수 없습니다 절 곳 :

SELECT id, auth, username 
FROM mdl_user 
WHERE auth = 'manual' AND DATEDIFF(NOW(), FROM_UNIXTIME(lastaccess))>=180 
0
SELECT id, auth, username 
FROM mdl_user 
WHERE auth = 'manual' AND lastaccess < UNIX_TIMESTAMP(CURRENT_DATE - interval 180 DAY) 

당신은 대신

관련 문제