Je peux certainement le faire en itérant à travers les résultats avec PHP, mais je voulais juste savoir si quelqu'un avait une seconde pour poster une meilleure solution.MySQL SELECT MIN pour tous les temps, mais seulement retourner si BETWEEN dates
Le scénario est que j'ai une liste de transactions. Je sélectionne deux dates et lance un rapport pour obtenir les transactions entre ces deux dates ... facile. Cependant, pour l'une des sections de rapports, je dois seulement retourner la transaction s'il s'agissait de leur première transaction.
Voici où je suis arrivé était avec la requête:
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
Cela me donne l'MIN
des transactions entre les dates sélectionnées. Ce dont j'ai vraiment besoin, c'est le MIN
global s'il se situe entre les deux dates. Cela a-t-il du sens?
J'ai fondamentalement besoin de savoir si un client a acheté pour la première fois au cours de la période considérée.
De toute façon, pas de précipitation comme je peux le résoudre avec PHP. Surtout pour ma propre curiosité et d'apprentissage.
Merci pour la diffusion des connaissances!
EDIT: J'ai dû modifier la requête car j'avais laissé une de mes erreurs d'essai là-dedans. J'avais également essayé d'utiliser la colonne temporaire créée à partir de MIN
comme le sélecteur entre les deux dates. Cela a renvoyé une erreur.
SOLUTION: Voici la requête révisée après l'aide de vous les gars:
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'
Oh wow, ce qui est excellent choses. Toutes ces années ... sous-requêtes .... qui savait;) Merci. –