簡體   English   中英

SQL 從給定日期選擇前 3 條記錄

[英]SQL select first 3 records from given date

我有兩個表,即客戶和交易。 有從當月 1 日開始的報價。

  1. 新客戶(在本月 1 日之后創建)將在第一筆交易中獲得 100% 的現金返還。
  2. 老客戶(在本月 1 日之前創建)自本月 1 日以來的第一次和第二次交易獲得 50%。
  3. 優惠第一點的客戶也有資格獲得第二點。

客戶表

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

這是你要找的嗎?

 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 中要做的事情有點復雜

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM