2011-12-27 60 views
0

我有表是這樣的:迭代通過此表的好方法?

ID Name Date StartTime EndTime SomeOtherID 
1 Mark 2011-11-25 15:00 17:00 1 
1 Tom 2011-11-26 17:00 19:00 1 
1 Jack 2011-11-27 20:00 22:00 1 

我需要這樣做

select * from other table 
Where ID=1 
AND( 
(Date = 2011/12/25 and time between 15:00 and 17:00) 
OR (Date =2011/12/26 and time between 17:00 and 19:00) 
OR (Date =2011/12/27 and time between 19:00 and 21:00) 
) 

我需要爲每一行執行此操作,其中SomeOtherID = 1,行次數未知的(可以是2,可能是30,所以我不能使用固定數量的參數)。

希望這個問題是可以理解的。

+0

你能告訴我們一些樣本數據來了解你有什麼,你可以更詳細你想要做什麼解釋當你迭代表中的每一行? – 2011-12-27 11:34:49

+0

現在好嗎? – 2011-12-27 11:41:26

+0

您能否顯示第一個表中的第二組行?所以這些名字真的不相關 - 對嗎? 'ID = 1'只是基本上定義了你在第二個查詢中的日期和時間範圍,正確? – 2011-12-27 11:51:38

回答

3

試試這個:

SELECT * 
FROM other_table ot 
INNER JOIN (SELECT Date, StartTime, EndTime 
      FROM first_table 
      WHERE SomeOtherID = 1 
      ) ft ON ot.Date = ft.Date AND ot.Time BETWEEN (ft.StartTime, ft.EndTime) 
WHERE ID=1; 
+0

在我的問題中表示的表具有時間和日期,其他表具有應選擇的值,其中時間在第一個表中的StartTime和EndTime之間,其中第一個表中的SomeOtherID是(某個值) – 2011-12-27 11:28:17

+1

我完全不理解這一點。爲什麼只有一個表中提到的問題? – 2011-12-27 11:29:40

+0

假設對於上述表中的ID = 1,我們有 日期= 2011/12/25 StartTime = 14:00 EndTime = 16:00 Date = 2011/12/26 StartTime = 15:00 EndTime = 17:00 日期= 2011/12/27 StartTime = 19:00 EndTime = 20:00 我應該從其他表中選擇* (日期= 2011/12/27和時間19:00至20:00) OR日期= 2011/12/26和時間15:00至17:00) 等 – 2011-12-27 11:32:25

0

試試這個

Select * 
from SomeTable 
where Time between StartTime and EndTime 
and Date = Date 
AND SomeOtherID = 1