2016-11-04 70 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