Sql server 按特定间隔筛选行

Sql server 按特定间隔筛选行,sql-server,database,tsql,sql-server-2012,Sql Server,Database,Tsql,Sql Server 2012,我在一个表中有以下日期时间值,只有当该值之间的间隔大于5秒时,我才需要过滤该集。这应该是一个特定的日期,从第一行开始 您知道如何使用SQL Server 2012仅在SQL中执行此操作吗 1 2014-04-02 05:33:56.60 2 2014-04-02 05:40:01.55 3 2014-04-02 05:52:45.81 4 2014-04-02 05:52:47.50 5 2014-04-02 06:35:48.84 6 2014-

我在一个表中有以下日期时间值,只有当该值之间的间隔大于5秒时,我才需要过滤该集。这应该是一个特定的日期,从第一行开始

您知道如何使用SQL Server 2012仅在SQL中执行此操作吗

1     2014-04-02 05:33:56.60
2     2014-04-02 05:40:01.55
3     2014-04-02 05:52:45.81
4     2014-04-02 05:52:47.50
5     2014-04-02 06:35:48.84
6     2014-04-02 06:50:49.72
7     2014-04-02 07:01:02.71
8     2014-04-02 07:01:04.35
9     2014-04-02 07:01:09.29
10    2014-04-02 07:44:05.71
11    2014-04-02 08:37:47.06

您可以使用lead函数获取下一个日期和datediff来计算秒数差,然后根据您的条件进行筛选

with cte as
(
    select id, date, diff = datediff(s, date, lead(date) over(order by date)
    from tbl
)
select * from cte where diff > 5

你可以这样使用它

WITH    rows AS
    (
    SELECT  *, ROW_NUMBER() OVER (ORDER BY InputDate) AS rn
    FROM    given_table
    )
SELECT  DATEDIFF(second, mc.InputDate, mp.InputDate)
FROM    rows mc
JOIN    rows mp
ON      mc.rn = mp.rn - 1
where DATEDIFF(second, mc.InputDate, mp.InputDate)> 5

在SQL Server 2012中,您可以使用lead函数,请尝试以下操作

;with cte as
(
    select id, d,  datediff(s, d, lead(d) over(order by d)) as diff from Test
)
select * from cte where diff > 5

希望这也能对你有所帮助

DECLARE @TAB TABLE (ID INT,DT DATETIME)
INSERT INTO @TAB VALUES
(1 ,'2014-04-02 05:33:56.60'),
(2 ,'2014-04-02 05:40:01.55'),
(3 ,'2014-04-02 05:52:45.81'),
(4 ,'2014-04-02 05:52:47.50'),
(5 ,'2014-04-02 06:35:48.84'),
(6 ,'2014-04-02 06:50:49.72'),
(7 ,'2014-04-02 07:01:02.71'),
(8 ,'2014-04-02 07:01:04.35'),
(9 ,'2014-04-02 07:01:09.29'),
(10,'2014-04-02 07:44:05.71'),
(11,'2014-04-02 08:37:47.06')
--质疑

--结果


您的sql版本是什么?我使用的是MS sql 2012,如果第一列中的数字密集(没有间隙),则在a.id=b.id+1和diff(a.timestamp,b.timestamp)>5秒时使用简单的自连接(伪代码)
。否则,您需要一个使用时间戳的相关子查询。我认为,您也可以使用
LAG
LEAD
函数@JimGarrison在性能方面,使用分析函数是否是一个好主意?MSSQL不知道。我使用Postgres。使用您的代码,我得到:关键字“select”附近的语法不正确。请你再核对一下好吗?
SELECT  A.*,B.* 
FROM    @TAB A,@TAB B 
WHERE   A.ID = B.ID - 1
AND     DATEDIFF(SECOND,A.DT,B.DT) > 5