2011-12-27 76 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