2016-11-04 71 views
0

只需查找以两个小时访问特定页面的客户并返回这些用户即可。重复访问的SQL时间范围

表格列将类似客户ID,页面名称&日期。尽管我能够找到不止一次访问特定页面名称的ID以及访问日期,但我无法将滚动两小时的时间段应用于唯一ID。

有什么建议吗?

回答

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; 

这会给你每客户ID和页面名称日期各事件之间的增量,用这个逻辑将让你在正确的方向。没有任何代码或数据的例子很难推测。

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