重复访问的SQL时间范围

时间:2016-11-04 16:39:53

标签: sql teradata

只需找到两个小时访问某个页面的客户并返回这些用户。

表格列将类似于客户ID,页面名称和列表。日期。虽然我能够找到不止一次访问过某个页面名称的ID以及访问过的日期,但我无法将两个小时的滚动时间应用于唯一的ID。

有什么建议吗?

2 个答案:

答案 0 :(得分:4)

您需要检查上一行的时间戳并将其与当前时间戳进行比较,如下所示:

SELECT DISTINCT custid 
...
QUALIFY 
   MAX(ts_col) -- previous timestamp
   OVER (PARTITION BY custid -- for each customer
         ORDER BY ts_col
         ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING)
   + INTERVAL '2' HOUR > ts_col

答案 1 :(得分:0)

尝试这样的事情

WITH ROW AS 
(
    SELECT *
        , ROW_NUMBER() OVER (ORDER BY customerid, [page name], date ) AS RN 
    FROM #YOURTABLE
)
    SELECT DISTINCT R1.customerid, R1.[page name], R1.date
    , (1.0*datediff(second, r1.date, r2.date)/(3600)) [delta (hrs)]
                FROM ROW R1
                    JOIN ROW R2
                    ON (    R1.RN = R2.RN - 1
                                and r1.customerid = r2.customerid
                                AND R1.[page name]= R2.[page name]                                  
                        )
                        order by customerid, [page name], DATE;

这将为您提供每个customerid和页面名称日期的每个事件之间的增量,使用此逻辑将使您获得正确的方向。没有任何代码或数据示例,很难推测。