Mysql SQL从给定日期选择前3条记录

Mysql SQL从给定日期选择前3条记录,mysql,sql,Mysql,Sql,我有两张表,即客户表和交易表。有从当月1日开始的优惠 本月1日之后创建的新客户将在其第一笔交易中获得100%的现金返还。 本月1日前创建的老客户自本月1日起的第一笔和第二笔交易可获得50%的佣金。 优惠第一点中的客户也有资格获得第二点。 客户表 交易表 我只需选择当月1日之后所有客户的前3笔交易,如果客户是新客户,则其第一笔交易有资格获得100%的现金返还。新客户第二笔和第三笔交易有资格获得50%的现金返还。 如果客户是老客户,则其本月1日后的第一笔和第二笔交易都有资格获得50%的现金返还 我需

我有两张表,即客户表和交易表。有从当月1日开始的优惠

本月1日之后创建的新客户将在其第一笔交易中获得100%的现金返还。 本月1日前创建的老客户自本月1日起的第一笔和第二笔交易可获得50%的佣金。 优惠第一点中的客户也有资格获得第二点。 客户表

交易表

我只需选择当月1日之后所有客户的前3笔交易,如果客户是新客户,则其第一笔交易有资格获得100%的现金返还。新客户第二笔和第三笔交易有资格获得50%的现金返还。 如果客户是老客户,则其本月1日后的第一笔和第二笔交易都有资格获得50%的现金返还

我需要为昨天完成的交易生成每日报告,并将其共享给客户团队。 SQL不是我的主要任务,由于短缺,我需要研究它。我正在使用excel手动执行所有这些操作。这很费时。 有人能告诉我一个可以给我预期结果的查询吗

预期结果


这就是你要找的吗

 SET @limit3 := 0, @cust := '';

 --outer query determines offer type and limits the offer to three transactions per customer
 SELECT Email, Created_Date, Trans_ID, Trans_Date, Amount
 CASE WHEN Created_Date > First_Day THEN 'First'
      ELSE 'Repeate'
 END CASE AS Offer_Type,
 @limit3 := if (@cust = Customer_ID, @limit3 + 1, 1) AS rowcount,
 @cust := Customer_ID


 --Inner query selects applicable fields, creates First_Day field, 
 --filters it to transactions done yesterday
 FROM
 (
   SELECT c.Email, c.Created_Date, t.Trans_ID, t.Trans_Date, t.Amount, c.Customer_ID
      DATE_ADD(LAST_DAY(c.Created_Date), interval 1 DAY), interval -1 MONTH) as First_Day
   FROM Customers c
   JOIN Transactions t
   ON c.Customer_ID = t.Customer_ID
   WHERE DATE(Trans_Date) = SUBDATE(NOW(), 1)
 )  AS sub

 GROUP BY c.Customer_ID
 HAVING rowcount <= 3
 ORDER BY c.Created_Date

在mysql中有点复杂

这个查询的输出看起来像什么而不是最终的查询:选择c.Customer\u ID,t.Trans\u ID,t.Trans\u Date,t.来自客户的金额表c连接交易表t在c.Customer\u ID=t.Trans\u ID上,其中month.Trans\u Date=MONTHCURDATE,YEARt.Trans\u Date=MONTHCURDATE,按t.Customer\u ID,t.Trans\u Date排序
Trans_ID      Customer_ID   Trans_Date            Amount
asd654qwe     2             2015-09-25 13:15:56   1200
dfg123xcv     56            2016-03-22 21:26:52   100
.
.
rty321cvb     4125          2016-05-05 08:42:06   500
c.Email   c.Created_Date  t.Trans_ID   t.Trans_Date   t.Amount   Offer_Type
record    record          record       record         record     First
record    record          record       record         record     Repeate
record    record          record       record         record     Repeate
 SET @limit3 := 0, @cust := '';

 --outer query determines offer type and limits the offer to three transactions per customer
 SELECT Email, Created_Date, Trans_ID, Trans_Date, Amount
 CASE WHEN Created_Date > First_Day THEN 'First'
      ELSE 'Repeate'
 END CASE AS Offer_Type,
 @limit3 := if (@cust = Customer_ID, @limit3 + 1, 1) AS rowcount,
 @cust := Customer_ID


 --Inner query selects applicable fields, creates First_Day field, 
 --filters it to transactions done yesterday
 FROM
 (
   SELECT c.Email, c.Created_Date, t.Trans_ID, t.Trans_Date, t.Amount, c.Customer_ID
      DATE_ADD(LAST_DAY(c.Created_Date), interval 1 DAY), interval -1 MONTH) as First_Day
   FROM Customers c
   JOIN Transactions t
   ON c.Customer_ID = t.Customer_ID
   WHERE DATE(Trans_Date) = SUBDATE(NOW(), 1)
 )  AS sub

 GROUP BY c.Customer_ID
 HAVING rowcount <= 3
 ORDER BY c.Created_Date