2013-08-05 19 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更新 –

相关问题