Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > Попадание записей в период дат.


Автор: Dumm 22.4.2013, 18:45
Всем не хворать! Есть такое дело: нужно выбрать записи из Таблицы1, где дата (date_in) находится в периоде, обозначенном датами date_beg и date_end. Период находится в Таблице2. Проблема в том, что периодов может быть несколько. Если бы они (периоды) шли подряд, например так: 
Код

DATE_BEG     DATE_END
01.01.2013   31.01.2013
01.02.2013   28.02.2013
01.03.2013   31.03.2013
 то все было бы просто: нужно выбрать MIN(DATE_BEG), MAX(DATE_END) и тогда
Код

SELECT * FROM Таблица1 WHERE date_in BETWEEN (MIN(DATE_BEG) AND MAX(DATE_END))
 (Такая форма записи не работоспособна, но я стараюсь передать суть, ибо меня интересует конструктивная составляющая.) И тогда, если date_in, скажем, равно 15.02.2013, то такая запись отберется и будет совершенно права. Но как быть, если периоды дискретны, например, так: 
Код

DATE_BEG     DATE_END
01.01.2013   31.01.2013
01.03.2013   31.03.2013
 тогда при date_in, равной 15.02.2013, запись отберется ошибочно. Вот и вопрос, как быть?

Автор: Akina 22.4.2013, 19:44
Код

select distinct t1.*
from table1 as t1, table2 as t2
where t1.date >= t2.date_start and t1.date <= t2.date_end

Автор: Dumm 22.4.2013, 20:30
Это сработает при непрерывном периоде. Однако так отберутся записи и при t1.date = '15.02.2013'. А во втором случае вообще нет такого периода. Это будет неверно.

Добавлено через 1 минуту и 33 секунды
Или я неверно понимаю логику предложенной конструкции?

Автор: Akina 22.4.2013, 20:54
Dumm, ты эта... поспи... а завтра ответишь... а то такую пургу несёшь, что уши вянут.

Автор: Dumm 23.4.2013, 18:30
Ну да, чего то я ступил. Причем, так гораздо проще, чем я делал. Выходит чесал правой ногой левое ухо... Спасибо, все работает.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)