蜂巢式查询,以查找客户自当前交易日期起最近10天内的交易总数

时间:2019-08-07 04:36:15

标签: sql

如何获取客户自上次交易之日起过去10天的交易次数。 示例:

Name  Type     Trx_date
Cody  sale  08/05/2018 12:11:43
Cody  sale  08/01/2018 07:51:49
Cody  sale  08/01/2018 07:51:49
Cody  sale  08/01/2018 07:51:49
Cody  sale  07/28/2018 03:21:32
Cody  sale  02/25/2018 05:19:34
Cody  sale  01/20/2018 06:15:41
Laim  sale  08/06/2018 11:41:23
Laim  sale  08/01/2018 07:51:49
Laim  sale  08/01/2018 07:51:49
Laim  sale  07/30/2018 22:58:13
Laim  sale  05/19/2018 03:21:02
Laim  sale  02/25/2018 09:19:34
Laim  sale  01/29/2018 07:15:41

结果必须为:

Name  Type     Last_Trx_date           10d_Count
Cody  sale   08/05/2018 12:11:43          5
Laim  sale   08/06/2018 11:41:23          4

3 个答案:

答案 0 :(得分:0)

这是您的查询。

select a.Name , a.Type, b.tdate as Last_Trx_date, count(1) as d_Count from table1 a
inner join 
    (select max(Trx_date) as tdate , Name from table1 group by name) as b on b.Name = a.Name 
where a.Trx_date> (b.tdate - interval 10 DAY)
group by a.Name , a.Type, b.tdate

答案 1 :(得分:0)

这会有所帮助

SELECT
Name,
SUBSTRING_INDEX(GROUP_CONCAT(Trx_date ORDER BY Trx_date DESC),',',1) AS last_transaction_date,
COUNT(*)
FROM 
tableName
WHERE Trx_date >= (NOW() - INTERVAL 10 DAY)
GROUP BY Name;

答案 2 :(得分:0)

通常可以使用窗口函数来实现:

select t.name, count(*)
from (select t.*,
             max(trx_date) over (partition by name) as max_trx_date
      from t
     ) t
where trx_date >= max_trx_date - interval '10 day'
group by name;

请注意,这使用标准SQL。特别是,日期操作在数据库之间有所不同,因此where子句可能需要修改。