2016-02-04 202 views
-1

假設我有一間名爲niagara的會議室。我想知道誰在開始和結束時間範圍內佔據了這個房間。表名是「尼亞加拉」。讓我們繼續搜索今天。SQL查詢:確定誰在特定時間範圍內佔用了房間

Person InTime  OutTime 
A  9AM   1PM 
B  10AM  12PM 
C  10:25AM  1:30PM 
D  9AM   9:00 PM 
E  12:20PM  5PM 
F  10:45 AM 11:30 PM 

給誰10:30和12:15之間佔用的人員名單PM

預期的答案是 - A,BC,d和F

如何做到這一點

我試過

SELECT PERSON 
FROM NIAGARA 
WHERE (IN_TIME > START_TIME AND OUT_TIME < END_TIME) 
    OR (IN_TIME < START_TIME AND OUT_TIME > END_TIME) 

順便說一句我在求職面試中被問到了這個問題。

因此,這意味着這是我想了解答案

+4

「InTime」和「OutTime」的數據類型是什麼? –

+2

你到目前爲止嘗試過什麼?你能告訴我們你的SQL語句嗎? StackOverflow的目的不是爲你寫語句,而是爲了幫助它,如果它不工作。 – BryanT

+0

您使用的串接是''',應該是'OR'嗎?當你嘗試這個時發生了什麼? –

回答

2

唯一OutTime唯一銀泰基本邏輯是,如果in_time小於期間結束且out_time在期間開始之後,則有人在房間中。因此,這將是:

SELECT PERSON 
FROM NIAGARA 
WHERE OUT_TIME > START_TIME AND IN_TIME < END_TIME; 

如何,實際上是在甲骨文表示,這取決於有值的存儲方式。就像措辭那樣,它們似乎被存儲爲字符串。然後做實際的比較需要更多的工作,但同樣的邏輯也成立。

+0

謝謝你對此 – Shiv

0

嘗試這種方式:

SELECT PERSON 
FROM NIAGARA 
WHERE IN_TIME BETWEEN '10:30AM' and '12:15PM' AND OUT_TIME BETWEEN '10:30AM' and '12:15PM' 

希夫看着你的問題說明你給你不應該返回任何結果沒有的行滿足你的條件。

滿足條件InTime BETWEEN '10:30AM' and '12:15PM'是F,但OutTime不滿足條件OutTime BETWEEN '10:30AM' and '12:15PM'

滿足條件OutTime BETWEEN '10:30AM' and '12:15PM'是B而銀泰不滿足條件InTime BETWEEN '10:30AM' and '12:15PM'

+0

這對oracle不起作用,你在假設什麼時候是什麼?如果是日期,那麼你必須投下'10:30AM' – sagi

+0

那麼它會選擇10:30之前進來的人嗎? – Shiv

+0

@Shiv where子句可以防止IN_TIME BETWEEN '10:30AM'和'12:15PM' –

2

常見的邏輯來檢查重疊範圍是:

(start#1,end#2) overlaps (start#2,end#2) 

start#1 <= end#2 AND end#1>= start#2 

根據您的邏輯(包括啓動&末包容性的或只有一個),你可能需要更改比較

start#1 < end#2 AND end#1>= start#2 
+0

感謝你對此 – Shiv

相關問題