mysqlは常にminを選択しますが、日付の間にのみ返されます
質問
私は確かにPHPで結果を反復することでこれを行うことができますが、誰かがより良い解決策を投稿するために2秒を持っているかどうかを知りたかっただけです。
シナリオは、トランザクションのリストがあるということです。 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'
解決
顧客によるすべてのトランザクションの最小限を実行する場合は、それが正しい期間にあるかどうかを確認してください...
これにより、顧客の最初の購入が期間内にあったかどうかについて、YES/NOのフラグが表示されます...
SELECT CASE COUNT(*) WHEN 0 THEN 'Yes' ELSE 'No' END As [WasFirstTransInThisPeriod?]
FROM (
SELECT bb_member.member_id As [member_id], 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_business.id = '5651'
GROUP BY bb_member.member_id
) T
WHERE T.temp_first_time BETWEEN '2010-08-01' AND '2010-09-13'
ORDER BY T.member_id DESC
(これはT-SQLにありますが、MySQLで同様にこれを達成できる方法についてのアイデアを与える必要があります)
サイモン
所属していません StackOverflow