[英]SQL to retrieve name of user making transactions under certain time
我正在尝试为我在杂货店客户数据上的 ML 工作创建功能。
数据有用户在购买杂货时进行的交易。
我正在尝试查找在 30 秒时间范围内进行连续交易的用户的名称。 这对于获取此类用户的个人资料很重要
例如,如果数据如下所示:
User Datetime Amount
1 Mary 2020-11-30 10:10:20 24
2 Jacob 2020-11-30 12:12:12 43.2
3 Alice 2020-11-30 11:11:11 75.29
4 Mary 2020-11-30 10:10:45 34
5 Mary 2020-11-30 10:11:15 21
6 Alice 2020-11-30 11:11:41 100
正确的答案是爱丽丝,因为只有爱丽丝在 30 秒的时间范围内有超过 1 笔交易。
Mary 可能看起来是可能的答案,但并非所有连续事务都有 30 秒的间隔。 它有 25 和 30。所以我们需要的正确答案是 Alice
一种方法是lag()
来获取上一个事务的时间。 以下返回 30 秒内的事务:
select t.*
from (select t.*,
lag(datetime) over (partition by user order by datetime) as prev_datetime
from t
) t
where prev_datetime > datetime - interval '30 second';
此语法使用标准 SQL; 日期/时间函数因数据库而异,因此确切的语法取决于您使用的数据库。
目前还不清楚你想如何总结这个来得到 Alice 而不是 Mary。
如果您需要将所有事务精确到 30 秒,您可以使用:
select user
from (select t.*,
lag(datetime) over (partition by user order by datetime) as prev_datetime
from t
) t
group by user
having sum(prev_datetime <> datetime - interval 30 second) = 0;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.