2014-11-03 45 views
0

比较行对我有2个表: 表1从一个表与行从另一个表

Column A Column B Time    
R   T   11/3/14 8:30:00  
A   T   11/3/14 8:35:00 

表2

Column A Column B Time2   
S   T   11/3/14 8:30:00 
U   T   11/3/14 8:32:00 

我必须写一个SQL查询,检查为每个表1中连续的行对,如果表2中有一行落在其间。所以在这种情况下,表2的第二行出现在8:32,所以它落在表1的前两行之间。 自从早上我一直在努力,有很多答案显示如何比较连续的行同一张桌子,但我不知道如何将它们与第二张桌子进行比较。

所需的输出是表2的2nds行: ü牛逼14年11月3日8点32分○○秒

有人能帮忙吗?

+1

你能编辑你的问题并添加你想要的输出吗?此外,使用数据库标记问题也很有帮助。 – 2014-11-03 20:20:01

+2

您正在使用哪个数据库服务器?甲骨文? SQL Server?还有其他的东西吗?... – Shiva 2014-11-03 20:20:29

+1

By _row pair_你的意思是按照“时间”的顺序排列的2个连续的行吗? – ForguesR 2014-11-03 20:26:56

回答

0

如果您正在使用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 
+0

感谢您的回答。它确实有帮助。 – ShalakaV 2014-11-07 20:23:11

0

步骤1:联盟两个表(我假定的结构是相同的)和排序时间。此外,添加一个字段,告诉你哪个表的记录来自(例如一个标志,其中0表示表1,1表表示2) 第2步:找出此联合结果集中属于表2的所有记录,来自table2的下一条记录。

让我知道你是否需要这个查询。