2014-11-03 46 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的下一條記錄。

讓我知道你是否需要這個查詢。