如果您正在使用SQL Server,则该数据集:
DECLARE @Table1 TABLE (A VARCHAR(10), B VARCHAR(10), Time1 Datetime)
DECLARE @Table2 TABLE (A VARCHAR(10), B VARCHAR(10), Time2 Datetime)
INSERT @Table1 VALUES
('R', 'T', '11/3/14 8:30:00'),
('A', 'T', '11/3/14 8:32:00'),
('R', 'T', '11/3/14 8:40:00'),
('A', 'T', '11/3/14 8:42:00')
INSERT @Table2 VALUES
('S', 'T', '11/3/14 8:30:00'),
('U', 'T', '11/3/14 8:32:00')
您可以获得与您可以通过交叉比较@表2表适用于:
SELECT t1.Time1 AS R_time, t.Time1 AS A_time
FROM @Table1 AS t1
CROSS APPLY
(
SELECT TOP 1 t2.Time1
FROM @Table1 AS t2
WHERE A = 'A' AND t2.Time1 >= t1.Time1
) AS t
WHERE A = 'R'
上面给出作为输出:
R_time A_time
-----------------------------------------------
2014-11-03 08:30:00.000 2014-11-03 08:32:00.000
2014-11-03 08:40:00.000 2014-11-03 08:42:00.000
因此,最终查询看起来像这样:
SELECT *
FROM @Table2 As t3
CROSS APPLY (
SELECT t1.Time1 AS R_time, t.Time1 AS A_time
FROM @Table1 AS t1
CROSS APPLY
(
SELECT TOP 1 t2.Time1
FROM @Table1 AS t2
WHERE A = 'A' AND t2.Time1 >= t1.Time1
) AS t
WHERE A = 'R'
) t4
WHERE t3.Time2 BETWEEN t4.R_time AND t4.A_time
输出:
A B Time2 R_time A_time
-------------------------------------------------------------------------------
S T 2014-11-03 08:30:00.000 2014-11-03 08:30:00.000 2014-11-03 08:32:00.000
U T 2014-11-03 08:32:00.000 2014-11-03 08:30:00.000 2014-11-03 08:32:00.000
你能编辑你的问题并添加你想要的输出吗?此外,使用数据库标记问题也很有帮助。 – 2014-11-03 20:20:01
您正在使用哪个数据库服务器?甲骨文? SQL Server?还有其他的东西吗?... – Shiva 2014-11-03 20:20:29
By _row pair_你的意思是按照“时间”的顺序排列的2个连续的行吗? – ForguesR 2014-11-03 20:26:56