2016-07-07 3 views
1

私はこれをどうやって行うのか、頭を悩ますためにかなりの時間を費やしましたが、できません。私はそれを自分のために複雑に遠くにしている、私はコードを理解している、ちょうどそれが一緒に流れる方法ではない。設定した日付​​に私は(visited = yes)を訪れたお客様を識別したい特定の店舗(store_id="NEA") - -お客様が特定の日付に費やして返品された場合、SQL重複数はカウントされますか?

私は"customer_id""store_id""visited"、および"date"の列を持つテーブル"Customers"を持っているなら、とは同じに戻ってきましたそれ以来の店舗、および返された顧客の数を数える - 誰でも私を助けることができますか?

私は"NEA"store_idを持っている人、「2015年5月14日」の日付のcustomer_idを選択する必要があります知っていて、「はい」訪問のために、私はその後、返された人たちをどのように識別しない、とそれらを数えます - その日に何人の顧客が訪問し、その後返されましたか?例えばので

customer_id | store_id | date  | visited 

123    NEA  2015-05-14  yes 

456    NEA  2015-05-14  yes 

789    ABC  2015-05-16  no 

123    NEA  2015-05-14  yes 

654    TDF  2015-05-12  yes 

987    PEH  2015-05-14  yes 

123    NEA  2015-05-14  no 

456    NEA  2015-05-17  yes 

987    LEA  2015-05-14  yes 

159    NEA  2015-05-16  yes 

123    NEA  2015-05-19  yes 
+0

回答をもう一度更新しました。 3番目のクエリ私はこれがあなたの後であることを願っています。 –

答えて

0
SELECT DISTINCT customer_id, date 
FROM Customers 
WHERE visited = 'yes' 
GROUP BY customer_id, store_id, date 
HAVING COUNT(*) >= 2 

が実行されているデモについては、以下のリンクをクリックしてください:

SQLFiddle

上記のクエリは、重複した顧客や日付のリストを生成します彼らは同じ店を2回以上訪問した。更新

SELECT t.date, COUNT(*) AS duplicateCount 
FROM 
(
    SELECT DISTINCT customer_id, date 
    FROM Customers 
    WHERE visited = 'yes' 
    GROUP BY customer_id, store_id, date 
    HAVING COUNT(*) >= 2 
) t 
GROUP BY t.date 

SQLFiddle

:あなたは日付によって重複顧客のカウントをしたい場合、あなたはそれとサブクエリをラップすることができますあなたのフィードバックに基づいて

、次のクエリでは、何を、あなたかもしれません念頭に置いていた:

SELECT DISTINCT customer_id 
FROM Customers 
WHERE visited = 'yes' 
GROUP BY customer_id, store_id 
HAVING SUM(CASE WHEN date = '2015-05-14' THEN 1 ELSE 0 END) >= 1 AND 
     SUM(CASE WHEN date > '2015-05-14' THEN 1 ELSE 0 END) >= 1 
+0

これまでのおかげで、みんなが助けてくれました。しかし、私がテストすると、それは正しくありません。 2015-05-14(visited = yes、store_id = yes)に何人の顧客が来たのかを知りたいのですが、456人の顧客を引き込むことはありません。何か不足していますか? – Fibob

+0

私たちは、私たちの推測を間違えないように期待される出力を見せてください。だから、どんな出力をしたいですか? –

+0

私は単にcustomer_idがほしいと思う|重複した顧客 - 2015年5月14日に訪問して戻った顧客の数。 – Fibob

0

またはこのような何か:

SELECT count(*) AS cnt,t.* 
FROM yourTable AS t 
WHERE 
    `date` = '2015-05-14' 
AND 
    store_id = 'NEA' 
AND 
    visited = 'YES' 
GROUP BY customer_id 
HAVING cnt >1; 
関連する問題