2012-11-20 3 views
1

주문에 대해 모든 데이터가 저장되는 테이블 (주문)이 있습니다.MySQL 3 개월 내에 주문이없는 고객 선택

우리는 주문/주문을 한 모든 고객을 나열하고 싶습니다. 그러나 주문을하지 않은 고객은 3 개월 후에 만 ​​제한합니다.

ORDER_ID, CUSTOMER_ID, 당신이 도움을 사전에 FIRSTNAME, LASTNAME, 이

을 DATE_ADDED이

감사 : 여기

는 데시벨 (차)에서 관련 테이블의 정보입니다!

+0

date_added는 어떤 형식입니까? 날짜 시간, 시간, 정수 등? – BenOfTheNorth

+0

안녕하세요, datetime입니다 –

답변

1

customer_id를 원한다고 가정하면 성 및 이름과 date_added는 timestamp, date 또는 datetime (문자열이 아님)과 같은 유효한 시간 필드입니다.

SELECT o.customer_id, o.firstname, o.lastname, MAX(o.date_added) AS latest_date FROM `order` o 
    LEFT JOIN `order` o2 ON o.customer_id = o2.customer_id 
        AND o2.date_added >= NOW() - INTERVAL 3 MONTH 
WHERE o2.order_id IS NULL 
GROUP BY o.customer_id, o.firstname, o.lastname 

테이블 이름 '주문'에 대한 백틱을 기록하십시오. 이것은 ORDER이 MySQL의 예약어이기 때문입니다. DB, 테이블 또는 열의 이름을 지정하는 데 예약어를 사용하지 마십시오. 항상 엉덩이에서 물지 않습니다.

모든 사용자에게 선물을 보내고 주문에 대한 모든 주문 정보가 3 개월 이내에있는 경우 포함하고 순서가없는 사용자 만 표시합니다.

고객 테이블에 대한 스키마를 제공하면이를 훨씬 더 명확하게 만들고 group by을 피할 수 있습니다.

+0

나는 이것을 시도했지만 SQL 오류를 제공합니다 : # 1064 - SQL 구문에 오류가 있습니다. 귀하의 MySQL 서버 버전에 해당하는 설명서를 확인하여 올바른 구문을 사용하여 '주문 o LEFT JOIN 주문 o2 ON o.customer_id = o2.customer_id'(1 행) 고객이 주문하지 않은 것을보고 싶습니다. 지난 3 개월 동안 –

+0

나는 이것을 시도하고 나를 위해 일했다 – Drew

+0

나는 그것이 수학과 질식에 질식 될 수 있고 당신이 가지고있는 것처럼 인라인을 좋아하지 않는다고 생각한다. > = DATE_ADD (NOW(), INTERVAL -3 MONTH)로 변경됩니다. - 부정적 3 개월을 추가하여 실패의 원인이 될 수있는 직접 뺄셈을 추가합니다. – DRapp

관련 문제