php - MySQL SELECT MIN 对于所有时间,但仅在 BETWEEN 日期时返回

标签 php mysql between

我当然可以通过使用 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'

最佳答案

如果我们至少进行客户的所有交易,然后检查是否在正确的时间段内,我们会得到类似于...的内容

这只会为您提供一个是/否标志,以确定客户的首次购买是否在此期间内...

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 中实现类似的效果)

西蒙

关于php - MySQL SELECT MIN 对于所有时间,但仅在 BETWEEN 日期时返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3700806/

相关文章:

mysql - 按时间间隔选择记录 12 :00:00 and 18:00:00 on every day

php - 在页面的不同部分回显相同的 MySql 查询

MySQL A 或 B,但不能同时两者

php - 尝试通过 PHP 将内容居中

javascript - 使用 php 导航到不同的 html 页面

java - 如何使用 NetBeans 进行 Servlet 与 MySQL 的 JDBC 连接

sql - BETWEEN 两个具有函数 SQL 的日期

python - 如果在文本文件中的两个不同字符之间,Python

php - Yii:Framework - 从 $_POST 中查找具有多个相关类别的表

php - 在子域下工作的 session cookie