[英]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.