我当然可以通过使用 PHP 迭代结果来做到这一点,但只是想知道是否有人有时间发布更好的解决方案。
场景是我有一个交易列表。我选择两个日期并运行报告以获取这两个日期之间的交易......很容易。不过,对于其中一个报告部分,如果这是他们的第一笔交易,我只需要返回交易。
这是我查询的地方:
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
如果它介于两个日期之间,我真正需要的是整体。那有意义吗?
我基本上需要知道一个客户在报告期内是否是第一次购买。
无论如何,我可以用 PHP 解决这个问题。主要是为了我自己的好奇心和学习。
感谢传播知识!
编辑:我不得不编辑查询,因为我在那里留下了一个试验错误。我还尝试使用创建的临时列MIN
作为两个日期之间的选择器。那返回了一个错误。
解决方案:在你们的帮助下,这是修改后的查询:
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'