2013-08-05 20 views
0

我有一個包含數百萬條記錄的表,其中包含日期/時間戳 - 我試圖返回具有差異的記錄>給定的秒數。SQL滯後或潛在客戶 - 如何根據具有日期/時間差異的行選擇記錄

表中包含日期/時間戳,但我無法使用where和計算的差異。 (createddate是日期字段,updatedon是日期/時間)

SELECT createddate, 
     LEAD(createddate, 1) OVER (ORDER BY createddate) AS created_next, 
     LEAD(createddate, 1) OVER (ORDER BY createddate) - createddate AS created_diff, 
     LEAD(updatedon, 1) OVER (ORDER BY updatedon) AS created_next, 
     LEAD(createddate, 1) OVER (ORDER BY updatedon) - updatedon AS Updatedon_diff 
FROM gsdaudit 
--WHERE created_diff > 1000 
ORDER BY updatedon_diff 
+1

您想要返回哪條記錄?差距之前的差距,差距之後的差距還是兩者? –

+0

任何一個或兩個如果可能 - 我只是測試一個差距>#秒 – Tanton

回答

0

最簡單的方法(假設SQL服務器)可能是使用DATEDIFF獲得在幾秒鐘之差,並把計算的公共表表達式內;

WITH cte AS (
    SELECT 
    createddate, 
    DATEDIFF(second, createddate, 
      LEAD(createddate, 1) OVER (ORDER BY createddate)) created_diff, 
    updatedon, 
    DATEDIFF(second, createddate, 
      LEAD(updatedon, 1) OVER (ORDER BY updatedon )) updatedon_diff 
    FROM gsdaudit 
) 
SELECT * FROM cte 
WHERE created_diff > 10 OR updatedon_diff > 10 

An SQLfiddle to test with

編輯:相同的查詢爲Oracle;

WITH cte AS (
    SELECT 
    createddate, 
    (LEAD(createddate, 1) OVER (ORDER BY createddate)-createddate)*24*60*60 created_diff, 
    updatedon, 
    (LEAD(updatedon, 1) OVER (ORDER BY updatedon)-updatedon)*24*60*60 updatedon_diff 
    FROM gsdaudit 
) 
SELECT * FROM cte 
WHERE created_diff > 10 OR updatedon_diff > 10 

Another SQLfiddle

+0

感謝您的信息 - 我在oracle工作,你有什麼信息可以用來替換datediff功能,或者例子會非常棒。 – Tanton

+0

@Tanton更新 –

相關問題