2013-06-04 38 views
0

我有一個澄清我想查詢的方式。在SQL查詢中的澄清

我想要得到位於特定時間範圍內的記錄。

我具有表具有開始時間爲1900-01-01 21的記錄:00:00.0和endTime爲1900-01-01 22:00:00.0

我有另一個表它有開始時間爲1900-01-01 21:47:43.0和結束時間爲1900-01-01 21:47:48.0

現在我的任務是找到tabl中的所有條目E中的具有表B.

最初我作爲查詢,如下所示的開始時間和結束時間:

select * 
from A 
where startTime between '1900-01-01 21:47:43.0' and '1900-01-01 21:47:48.0' 

,我沒有得到結果。

然後我嘗試下面的查詢

select * 
from A 
where startTime < '1900-01-01 21:47:43.0' and startTime > '1900-01-01 21:47:48.0' 

,我得到了一排。

在表中我有這樣的範圍:

1900-01-01 21:00:00.0 - 1900-01-01 22:00:00.0 
1900-01-01 22:00:00.0 - 1900-01-01 23:00:00.0 
1900-01-01 23:00:00.0 - 1900-01-01 23:30:00.0 
. 
. 
. 

等。

,並在表B I已經開始行和endTimes像

1900-01-01 21:27:30.0 - 1900-01-01 21:27:55.0 
1900-01-01 22:11:22.0 - 1900-01-01 22:11:44.0 
1900-01-01 23:22:11.0 - 1900-01-01 23:22:55.0 
. 
. 
. 
and so on. 

我不得不從表B中把開始時間和結束時間,並符合表A插槽,並得到結果。

所以我的第一種方法是查詢正確,或者是第二種方法是正確的還是有其他方法可以做到這一點。

編輯

因爲我們正在努力尋找在表A中的記錄,其中存在範圍我試圖用開始和B的endTimes如下:

select * 
    from A 
     and '1900-01-01 21:47:43.0' between startTime and endTime 
     and '1900-01-01 21:47:48.0' between startTime and endTime 
+0

這取決於你想要的結果是什麼,你想要兩個表之間的開始和結束時間匹配?或者你是否想在B中找到位於表A範圍內的記錄? –

+0

@Goat_CO:我希望表A中的所有記錄都封裝了表B中記錄的startTime和endTime。在這種情況下,我想要做什麼。 –

+0

這很令人困惑,因爲在問題的頂部,您顯示的A的值與底部A的值不同,頂部B的值與底部B的值不同。 –

回答

0

我覺得最簡單的事情就是使用BETWEEN加入表格

SELECT A.* 
FROM A 
JOIN B 
ON b.start_time BETWEEN a.start_time AND a.end_time 
AND b.end_time BETWEEN a.start_time AND a.end_time 

這將返回從A開始和E第二,從B乘以由一系列封裝在A.

你的第二個查詢並不太看的權利,因爲你比較兩邊的START_TIME,但這種想法是因爲這類似:

SELECT A.* 
FROM A 
JOIN B 
ON a.start_time < b.start_time 
AND a.end_time > b.end_time 

任何一個查詢都應返回從B封裝起始時間的範圍。

+0

感謝您的回覆。在這裏你的第二個查詢返回一行,但你的第一個查詢你已經加入了2表返回沒有行。 –

+0

在這裏你的第二個查詢返回一行,但你的第一個查詢,你已經加入了2表返回沒有行因爲A的開始時間'1900-01-01 21:00:00'不會發生在'1900-01-01 21 :1900:01:21:47:43.0'和A'的endTime'1900-01-01'不會發生在'1900-01-01 21:47:43.0'和'1900-01- 01 21:47:48.0'。那麼如何糾正第一個查詢。 –

+0

A是範圍表,對不對?第一個查詢表明b的start_time必須在A的範圍之間,並且b的end_time必須在完全封裝的A的範圍之間。如果範圍是在A應該工作。 –