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。另外,即使两个日期之间的差异不止一个,查询也应该返回成对的行是什么意思?这不是连续的。您能否提供一些示例输入和预期输出以澄清?