2013-05-17 2 views
-4

나는 60 일 이상 된 모든 기록을 가져오고 싶습니다. 메신저 create_date 열을 가지고, 요구 사항지난 60 일 전날의 기록을 얻는 방법

SELECT * FROM mytable WHERE create_date BETWEEN DATE_SUB(NOW(), INTERVAL 60 DAY) AND create_date >'60days' 

위의 만족 내 쿼리를 가지고 쿼리를 제안 해주십시오

권리 쿼리는

SELECT * FROM mytable WHERE create_date < DATE_SUB(NOW(), INTERVAL 60 DAY); 
+4

는 somethihng .. –

+0

이 참으로 내가 시도하려고하지만 create_date'입니다'DATE', 다음'경우에 당신이 가능성이 도움 – user1965816

+0

을 retreive에 실패하여 'create_date> '60days'로 편집하는 것은 의미가 없습니다. 간격을 사용하여 날짜를 비교할 수 없습니다. – mvp

답변

0

select * from tablename where datediff(now(), date) > 60 

나는 같은 것을 시도입니다 date이라는 열에 date이 저장되어 있다고 가정합니다. 10, date 대신 열 이름을 사용합니다.

희망 사항. SQL에서

+0

테이블이 클 경우이 쿼리는 매우 느리게 작동합니다. 색인 생성은 도움이되지 않습니다 – mvp

+0

위의 검색어를 사용하여 가져 오는 레코드가 없습니다 – user1965816

+0

내 업데이트 답변도 참조하십시오. – Rahul

2

, 표현은

x BETWEEN a AND b 

그대로

a <= x AND x <= b 

a > b 경우이 상관없이 빈 결과를 얻을 수없는 것을 의미합니다.

즉, 주문은 중요합니다. x BETWEEN a AND b을 사용할 때 a은 < = b이어야합니다.

당신을 위해 스왑 날짜를 의미한다 (뿐만 아니라 다른 오류를 수정) :

SELECT * FROM mytable 
WHERE create_date BETWEEN '2011-10-14' 
      AND NOW() - INTERVAL 60 DAY 

UPDATE : 기능을 DATE_SUB() 또는 DATE_ADD()를 사용하는 방법에 대한 한 번 더 참고.

큰 테이블의 날짜를 비교해야하는 경우 일반적으로 이러한 기능을 사용하지 않아야합니다. 현대 MySQL은

DATE_SUB(create_date, INTERVAL 60 DAY) 

create_date - INTERVAL 60 DAY 

에 해당 최신 표준 +- 연산자를 사용하여 연산, 그래서 표현을 지원뿐만 아니라이 쉽게 읽을 수 있지만, 그것은 또한 서버가 가능한 인덱스를 활용할 수 있습니다 create_date 열을 만들었습니다. 이 단축은 DATE_SUB()과 같은 함수 호출에는 적용될 수 없습니다 - MySQL은 기능 인덱스를 지원하지 않습니다. 당신이이어야 할 필요가

+0

업데이트 답변 - 가능한 경우 DATE_SUB()를 피하십시오! – mvp

관련 문제