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

时间:2016-05-06 15:19:31

标签: mysql sql

我有两个表,即客户和交易。有报价从当月1日开始。

  1. 新客户(在本月1日之后创建)将在首次交易中获得100%的现金返还。
  2. 旧客户(本月1日之前创建)自本月1日起第一次和第二次交易获得50%。
  3. 优惠第一点的顾客也有资格获得第二点。
  4. 客户表

    Customer_ID   Email       Created_Date
    1             abc@g.com   2015-08-14 12:25:55
    2             xyz@s.com   2016-01-23 18:16:34
    .
    .
    n             ags@h.com   2016-05-05 23:25:43
    

    交易表

    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
    

    我需要在当月1日之后仅选择所有客户的前3个交易,然后如果客户是新的,则他的第一笔交易有资格获得100%现金返还。新客户第二和第三笔交易有资格获得50%的现金返还。 如果客户年满,则本月1日之后的第一笔和第二笔交易有资格获得50%的现金返还。

    我需要每天为昨天完成的交易生成报告,并将其分享给客户团队。 SQL不是我的主要任务,由于缺乏,我需要调查它。我正在使用excel手动完成所有这些操作。这非常耗时。 任何人都可以让我知道一个可以给我预期结果的查询吗?

    预期结果

    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
    

1 个答案:

答案 0 :(得分:1)

这是你正在寻找的吗?

 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中进行复杂的排序