sql get在注册后60天内的事务计数

drkbr07n  于 2021-08-09  发布在  Java
关注(0)|答案(3)|浏览(205)

所以我把每个用户的注册日期都写在一列里。但我需要确定登记日期,找出60天内的每一笔交易,然后数一数。我还需要在一个查询中完成这一切。我是sql新手,所以不确定是否应该创建临时表或使用子查询来获取该注册值并查找下一个60天的值。
所以理想情况下这就是我想要的回报

User_id  -----  registration_date -----   transactions
-------------------------------------------------
 - 4             1/1/2019                 43
 - 7             4/3/2017                 22
 - 9             3/3/2016                 15
v2g6jxz6

v2g6jxz61#

你没有提供任何数据库管理系统,所以我会做一个一般性的回答。
问题=如何从给定日期起60天内获得交易记录?
解决方案:
在大多数数据库管理系统中,都有将给定日期或时间戳转换为天的函数。这意味着我们可以使用这个函数来计算两个值之间的天数。下面的查询将得到您要查找的结果(排序):

SELECT 
User_id, 
registration_date, 
COUNT(transactions) as transactions FROM [db].[transactions]
WHERE TO_DAYS([db].[transactions]) - TO_DAYS([db].[transactions].[transaction_date]) <= 60
group by User_id, registration_date, transactions

但是,在上面的查询中,我不确定如何将它们组合在一起。但在你的情况下,解决方法可能是正确的。

jtoj6r0c

jtoj6r0c2#

LEFT JOIN 会得到那个信息的。例如:

select
  u.user_id,
  min(u.registration_date) as registration_date,
  count(t.user_id) as transactions
from user u
left join transaction t on t.user_id = u.user_id
  and t.tx_date between u.registration_date
                    and dateadd(day, 60, u.registration_date) 
group by u.user_id
a9wyjsp7

a9wyjsp73#

我猜你们有两张table,我会叫它们 users 以及 transactions :

select u.user_id, u.registration_date, count(t.user_id)
from users u left join
     transactions t
     on t.user_id = u.user_id and
        t.transaction_date >= u.registration_date and
        t.transaction_date < dateadd(day, 60, u.registration_date)
group by u.user_id, u.registration_date;

相关问题