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

Можете ли вы показать нам некоторые образцы данных, чтобы понять, что у вас есть, и вы можете объяснить более подробно, что вы пытаетесь сделать, каждая строка, когда вы перебираете стол? –

+0

Теперь лучше? –

+0

Не могли бы вы показать второй набор строк из первой таблицы? Значит, имена действительно не актуальны вообще? «ID = 1» просто в основном определяет, какие даты и временные интервалы у вас есть в вашем втором запросе, правильно? –

ответ

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 в первой таблице (некоторое значение) –

+1

Я вообще этого не понимал , Почему в вопросе упоминается только одна таблица? –

+0

Скажем, что для ID = 1 в указанной таблице Дата = 2011/12/25 StartTime = 14:00 EndTime = 16: 00 Дата = 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) и т. Д. –

0

Попробуйте

Select * 
from SomeTable 
where Time between StartTime and EndTime 
and Date = Date 
AND SomeOtherID = 1 
Смежные вопросы