SQL如何选择日期连续的行对?

SQL如何选择日期连续的行对?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有以下简单的表格: create table Table1( ID int NOT NULL IDENTITY(1,1), [Date] datetime ) 我需要一个select查询,返回按2分组的行对,条件是行的日期值必须是连续的。返回如下内容: 1 2014-08-10 09:29:53.160 2 2014-08-11 09:29:53.160 2 2014-08-11 09:29:53.160 3 2014-08-12 09:29:53.160 3 2014-

我有以下简单的表格:

create table Table1(
ID int NOT NULL IDENTITY(1,1),
[Date] datetime
)
我需要一个select查询,返回按2分组的行对,条件是行的日期值必须是连续的。返回如下内容:

1   2014-08-10 09:29:53.160 2   2014-08-11 09:29:53.160
2   2014-08-11 09:29:53.160 3   2014-08-12 09:29:53.160
3   2014-08-12 09:29:53.160 4   2014-08-13 09:29:53.160
4   2014-08-13 09:29:53.160 5   2014-08-14 09:29:53.160
2   2014-08-09 09:29:53.160
1   2014-08-10 09:29:53.160 
我这样问:

select * from Table1 t1
inner join Table1 t2 on t1.ID < t2.ID
where t2.Date = DATEADD(DD,1,t1.Date)
此外,在处理大量插入的行时,查询应该是快速的

我的意思是,如果我有以下输入:

1   2014-08-09 09:29:53.160 
2   2014-08-11 09:29:53.160 
3   2014-08-12 09:29:53.160 
4   2014-08-14 09:29:53.160 
5   2014-08-18 09:29:53.160 
那么输出应该是:

1 2014-08-09 09:29:53.160 2 2014-08-11 09:29:53.160 
2 2014-08-11 09:29:53.160 3 2014-08-12 09:29:53.160 
3 2014-08-12 09:29:53.160 4 2014-08-14 09:29:53.160
4 2014-08-14 09:29:53.160 5 2014-08-18 09:29:53.160
有人给了我正确的答案,但我看到他删除了答案。它是:

SELECT 
  t1.id, 
  t1.[Date],
  x.id,
  x.[Date]
FROM
  Table1 t1
CROSS APPLY
(
  SELECT top 1 percent 
    [Date],
    ID
  FROM 
    Table1
  WHERE 
    t1.[Date] < [Date]
  ORDER BY [Date]
) x
感谢所有试图帮助我的人。

试试这个:

select id
,Current_Row.EFF_DATE
,case when NextRow.EFF_DATE is null then '20991231' else NextRow.EFF_DATE end
from TABLE1 as Current_Row
left join TABLE1 as NextRow
on NextRow.iD = Current_Row.iD + 1
如果不需要为您可以替换的最后一个日期设置间隔,则当NextRow.EFF_date为空时,则“20991231”否则NextRow.EFF_date以NextRow.EFF_date结束,并使用内部联接左联接尝试以下操作:

SELECT t1.ID, t1.Date, t3.ID AS ID1, t3.Date AS Date1 
FROM Table1 AS t1
    OUTER APPLY 
        (SELECT TOP 1 t2.ID, t2.Date 
            FROM Table1 AS t2
            WHERE t2.Date <= t1.Date AND t2.ID < t1.ID
            ORDER BY t2.Date DESC, t2.ID DESC) AS t3

您使用的是哪个版本的SQL Server?我使用的是SQL Server 2008.OK。另外,即使两个日期之间的差异不止一个,查询也应该返回成对的行是什么意思?这不是连续的。您能否提供一些示例输入和预期输出以澄清?