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

数据位

我有两个表,即“客户”和“交易”。从当月1日开始提供优惠。

  1. 新客户(在本月1日之后创建)将为他们的第一笔交易获得100%的现金返还。
  2. 老客户(在本月1日之前创建)在本月1日以来的第一笔交易和第二笔交易中获得50%的收益。
  3. 优惠第一点的客户也有资格获得第二点。

客户表

Customer_ID   Email       Created_Date
1             [email protected]   2015-08-14 12:25:55
2             [email protected]   2016-01-23 18:16:34
.
.
n             [email protected]   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
quest4truth

这是您要找的东西吗?

 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中做

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

选择给定日期和日期之间的记录。

来自分类Dev

给定日期的最大日期 - sql

来自分类Dev

SQL查询(Oracle)-选择最接近给定日期的日期

来自分类Dev

SQL:查找具有给定日期范围内每月数据的记录

来自分类Dev

SQL:查找具有给定日期范围内每个月的数据的记录

来自分类Dev

返回给定日期内的所有记录

来自分类Dev

获取每个给定日期之前的雇员的最新记录

来自分类Dev

获取每个给定日期之前的雇员的最新记录

来自分类Dev

SQL-查询以返回给定日期的活动订阅

来自分类Dev

SQL查询以获取给定日期的产品价值

来自分类Dev

Oracle SQL声明给定日期为变量

来自分类Dev

查询以在记录“开始”和“停止”日期的表中查找给定日期的活动记录

来自分类Dev

获取一组记录与给定日期的最接近日期

来自分类Dev

如何获得给定日期的午夜?

来自分类Dev

给定日期后打开表格

来自分类Dev

给定日期的Javascript消息脚本

来自分类Dev

计算给定日期的整周数

来自分类Dev

将日期选择器设置为给定日期

来自分类Dev

如果给定日期在两个日期之间,如何选择行?

来自分类Dev

MySQL选择从给定日期起大于或等于最近的过去日期的列

来自分类Dev

TSQL-在2个给定日期之间递归选择日期

来自分类Dev

如何在SQL Server中获得给定日期的日期范围之间的日期

来自分类Dev

需要帮助才能在给定日期从2个以上的表中获取记录

来自分类Dev

查找距给定日期/时间戳最近的记录(之前或之后)

来自分类Dev

如何使用C#检索给定日期(无论时间如何)的记录?

来自分类Dev

仅显示MySQL中每条记录的最新给定日期

来自分类Dev

需要帮助以在给定日期从2个以上的表中获取记录

来自分类Dev

如何使用Jongo运行查询以获取给定日期之间的记录?

Related 相关文章

  1. 1

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

  2. 2

    选择给定日期和日期之间的记录。

  3. 3

    给定日期的最大日期 - sql

  4. 4

    SQL查询(Oracle)-选择最接近给定日期的日期

  5. 5

    SQL:查找具有给定日期范围内每月数据的记录

  6. 6

    SQL:查找具有给定日期范围内每个月的数据的记录

  7. 7

    返回给定日期内的所有记录

  8. 8

    获取每个给定日期之前的雇员的最新记录

  9. 9

    获取每个给定日期之前的雇员的最新记录

  10. 10

    SQL-查询以返回给定日期的活动订阅

  11. 11

    SQL查询以获取给定日期的产品价值

  12. 12

    Oracle SQL声明给定日期为变量

  13. 13

    查询以在记录“开始”和“停止”日期的表中查找给定日期的活动记录

  14. 14

    获取一组记录与给定日期的最接近日期

  15. 15

    如何获得给定日期的午夜?

  16. 16

    给定日期后打开表格

  17. 17

    给定日期的Javascript消息脚本

  18. 18

    计算给定日期的整周数

  19. 19

    将日期选择器设置为给定日期

  20. 20

    如果给定日期在两个日期之间,如何选择行?

  21. 21

    MySQL选择从给定日期起大于或等于最近的过去日期的列

  22. 22

    TSQL-在2个给定日期之间递归选择日期

  23. 23

    如何在SQL Server中获得给定日期的日期范围之间的日期

  24. 24

    需要帮助才能在给定日期从2个以上的表中获取记录

  25. 25

    查找距给定日期/时间戳最近的记录(之前或之后)

  26. 26

    如何使用C#检索给定日期(无论时间如何)的记录?

  27. 27

    仅显示MySQL中每条记录的最新给定日期

  28. 28

    需要帮助以在给定日期从2个以上的表中获取记录

  29. 29

    如何使用Jongo运行查询以获取给定日期之间的记录?

热门标签

归档