代码之家  ›  专栏  ›  技术社区  ›  Senica Gonzalez

MySQL始终选择MIN,但仅在日期之间返回

  •  0
  • Senica Gonzalez  · 技术社区  · 14 年前

    场景是我有一个事务列表。我选择两个日期并运行一个报告来获取这两个日期之间的事务…很简单。不过,对于其中一个报告部分,我只需要在事务是他们的第一个事务时返回该事务。

    我的问题是这样的:

     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 所选日期之间的交易记录。我真正需要的是 如果在两个日期之间。这有道理吗?

    谢谢你传播知识!

    编辑: 我不得不编辑查询,因为我在那里留下了一个试用错误。我还尝试使用从创建的临时列 最小 作为两个日期之间的选择器。返回了一个错误。

    以下是在你们的帮助下修改的查询:

    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'
    
    1 回复  |  直到 12 年前
        1
  •  2
  •   Simon Cowen    14 年前

    这只会给你一个“是/否”标志,告诉你客户的第一次购买是否在。。。

    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中如何实现这一点的想法)

    西蒙