2011-09-19 5 views
0

이메일 마케팅 메시지에 추적 픽셀을 사용하여 전자 메일 읽기를 등록하는 트랜잭션 테이블이 있습니다. 나는 6 주전에 마지막으로 읽은 전자 메일을 읽은 거래 테이블의 레코드를 제공하는 쿼리를 구조화하려고합니다. 이유는, 그 거래가 우리의 이메일 마케팅에 "종사"하지 않았기 때문에이를 반영하기 위해 가입자 필드 중 하나를 업데이트해야합니다 (그래서 그들은 다른 유형의 이메일을받을 수 있습니다). 내가 영어를 쓰는 것 인 경우에MySQL SELECT 문 구성 도움말

, 문은 다음과 같이 가지 보일 것이다

가입자 ID가 6 개 이상의 주 전에 존재하지만 존재하지 않는다 거래에서 행을 선택 지난 6 주.

따라서 처음 생각한 것은 지난 6 주 동안 이메일을 열어 본 사람들의 레코드 세트를 만들고 나머지 테이블과 비교하는 것입니다. 한 문장으로이 작업을 수행 할 수 있습니까? 아니면 두 개로 나누어야합니까?

미리 도움을받을 수있는 사람에게 감사드립니다.

답변

3
SELECT SubscriberId 
    FROM TransactionTable 
    GROUP BY SubscriberId 
    HAVING MAX(ReadDate) < DATE_SUB(NOW(), INTERVAL 6 WEEK) 
+0

감사합니다. Joe; 내가 몇 군데 더 조건을 어디에두면 좋을까요? ('status = "C"'라고 부르지 않고 실제로이 쿼리에서 제외시키는 하나의 필드가있다.) –

+0

'어디서'FROM'과'GROUP BY' 사이에 오는가? –

+0

굉장합니다. 일했다. 적절한시기에 약 120 개의 레코드가 있습니다. 이것이 실제로 해결책인지 확인하기 위해 6 주 내에 레코드 세트에 대해 샘플을 비교하려고합니다. 다시 한 번 감사드립니다! –

0

화려한 수학이 필요 없습니다. 마지막 6 주 동안 기록에는 트랜잭션이없는 모든 사용자 : 귀하의 요구 사항은 간단 < 절 아래로 비등

SELECT userID 
FROM transactionstable 
WHERE MAX(timestampfield) < DATE_SUB(now(), INTERVAL 6 WEEK) 
GROUP BY userID 
+1

을하지만 여전히도 더있는 고객을 반환 할 수 최근 거래. –

+0

빠른 답장을 보내 주셔서 감사합니다. 그러나 6 주 전의 모든 기록을 볼 수있는 방법을 알았지 만, 그 가입자 중 한 명이 6 주 표시 안에 있는지 여부는 어떻게 알 수 있습니까? 왜냐하면 나는 그 사람들을 업데이트하고 싶지 않기 때문에 6 주 표시 밖에 있지만 내부에는없는 사람들입니다. –

+0

좋은 지적. 쿼리를 조금 수정했습니다. 위의 Joe와 거의 같지만 HAVING 대신 WHERE 절을 사용합니다. –

0

는 마지막 6 주 활동을 보여줍니다 필드를 정의합니다. 나는 그런 정수 0 또는 1을 의미 :

SELECT * FROM transtable WHERE activityfield = 0 AND datefield < DATE_SUB(now(), INTERVAL 6 WEEK)

0

오라클 SQL을 지원 작업하고있는 데이터베이스는 다음이 시도하는 경우 :

SELECT * from transactions 
WHERE subscribed_date < SYSDATE-(6*7);