簡體   English   中英

SQL 檢索在一定時間內進行交易的用戶名

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM