PHPで結果を繰り返すことでこれを確実に行うことができますが、誰かがより良い解決策を投稿する秒があるかどうかを知りたかっただけです。
シナリオは、トランザクションのリストがあるというものです。2つの日付を選択し、レポートを実行して、これら2つの日付間のトランザクションを取得します...簡単です。ただし、レポートセクションの1つについては、最初のトランザクションである場合にのみトランザクションを返す必要があります。
これが私がクエリで得たところです:
SELECT *, MIN(bb_transactions.trans_tran_date) AS temp_first_time
FROM
bb_business
RIGHT JOIN bb_transactions ON bb_transactions.trans_store_id = bb_business.store_id
LEFT JOIN bb_member ON bb_member.member_id = bb_transactions.trans_member_id
WHERE
bb_transactions.trans_tran_date BETWEEN '2010-08-01' AND '2010-09-13'
AND bb_business.id = '5651'
GROUP BY bb_member.member_id
ORDER BY bb_member.member_id DESC
これによりMIN
、選択した日付間のトランザクションがわかります。私が本当に必要としているのはMIN
、2つの日付の間にある場合の全体です。それは理にかなっていますか?
基本的に、顧客がレポート期間中に初めて購入したかどうかを知る必要があります。
とにかく、私がPHPで解決できるので、大急ぎではありません。主に私自身の好奇心と学習のためです。
知識を広めてくれてありがとう!
編集:試行錯誤の1つをそこに残していたため、クエリを編集する必要がありました。MIN
また、2つの日付の間のセレクターとしてから作成された一時列を使用しようとしました。エラーが返されました。
解決策:皆さんの助けを借りて修正されたクエリは次のとおりです。
SELECT * FROM (
SELECT
bb_member.member_id,
MIN(bb_transactions.trans_tran_date) AS first_time
FROM
bb_business
RIGHT JOIN bb_transactions ON bb_transactions.trans_store_id = bb_business.store_id
LEFT JOIN bb_member ON bb_member.member_id = bb_transactions.trans_member_id
WHERE bb_business.id = '5651'
GROUP BY bb_member.member_id
) AS T
WHERE T.first_time BETWEEN '2010-08-01' AND '2010-09-13'