私はバックエンド開発者ではないので、SQL の経験はほとんどありません。私はテーブルから「毎月の購入」をフィルタリングする必要があります。これは、クライアントが同じトランザクションで製品を購入し、異なる日付で出荷される場合です。
これをテーブルに置いたとしましょう:
transactionID | deliveryDate
------------- | ------------
1 | 2013-11-24
1 | 2013-11-24
2 | 2013-11-26
3 | 2013-11-10
3 | 2013-11-17
3 | 2013-11-24
4 | 2013-11-10
4 | 2013-11-10
4 | 2013-11-17
4 | 2013-11-17
結果としてこれが欲しい:
transactionID | deliveryDate
------------- | ------------
3 | 2013-11-20
3 | 2013-11-22
3 | 2013-11-24
4 | 2013-11-10
4 | 2013-11-10
4 | 2013-11-17
4 | 2013-11-17
取引 3 と 4 だけが私の基準に適合します。取引 1 は同じ取引で複数の購入があり、配送日は同じであるためです。トランザクション 2 も適合しません。複数のアイテムを購入する必要があります。したがって、基本的には、transactionID のカウントが複数あるすべての行を選択する必要がありますが、複数の異なる deliveryDate がある場合にのみ選択する必要があります。
これまでに試したことは次のとおりです。
SELECT *
FROM myTable
WHERE `transactionID` IN
( SELECT `transactionID`
FROM `myTable`
GROUP BY `transactionID`
HAVING COUNT(*) > 1
)
ORDER BY `transactionID`
同じトランザクションで複数の購入がある場合にフィルタリングしているだけであることは知っていますが、これに従う方法が本当にわかりません。さらに、列がたくさんあるため、このクエリはかなり遅いので、おそらくもっと良い方向性があると思います。
ありがとう!