Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Объединение пересекающихся дат
 
 автор: g.rjabkin   (21.11.2011 в 14:52)   личное сообщение
 
 

Есть запрос на выборку Q с таблицы T, в котором 3 поля:
ФИО Дата_Начала Дата_Окончания
Петров 1.05.2009 19.05.2009
Петров 1.05.2009 8.06.2009
Сидоров 5.05.2009 10.05.2009
Сидоров 4.05.2009 11.05.2009
Сидоров 5.05.2009 10.05.2009
Иванов 21.05.2009 30.05.2009
Иванов 6.05.2009 23.05.2009
Иванов 8.06.2009 18.06.2009

Нужно, чтобы новый запрос объединил пересекающиеся даты, следующим образом:
ФИО Дата_Начала Дата_Окончания
Петров 1.05.2009 8.06.2009
Сидоров 4.05.2009 11.05.2009
Иванов 6.05.2009 30.05.2009
Иванов 8.06.2009 18.06.2009

Помогите пожалуйста составить sql запрос в MS Access 2010 (строк ~2900, фио ~365)

  Ответить  
 
 автор: kot_k_k   (21.11.2011 в 14:56)   личное сообщение
 
 

навскидку -
1 запрос по фио и первой дате с выявлением Min (группировки по ФИО)
2 запрос по фио и второй дате с выявлением Max (группировки по ФИО)
3. запрос по ФИО + запрос 1 + и запрос 2 с группировкой по ФИО.

  Ответить  
 
 автор: g.rjabkin   (21.11.2011 в 15:24)   личное сообщение
 
 

Иванов 6.05.2009 30.05.2009
Иванов 8.06.2009 18.06.2009

Если два интервала дат не пересекаются, то я так понимаю один будет не включён, а нужны оба.

  Ответить  
 
 автор: kot_k_k   (21.11.2011 в 15:27)   личное сообщение
 
 

блин читал по диагонал сорь

  Ответить  
 
 автор: kot_k_k   (21.11.2011 в 15:50)   личное сообщение
 
 

http://am.rusimport.ru/MsAccess/topic.aspx?ID=319
http://www.sql.ru/forum/actualthread.aspx?bid=4&tid=895462

  Ответить  
 
 автор: g.rjabkin   (05.12.2011 в 21:40)   личное сообщение
 
 

спс за ссылку на мой же топик на другом форуме:)

  Ответить  
 
 автор: silich   (06.12.2011 в 15:13)   личное сообщение
 
 

ФИО dfrom datetill
Иванов 06.05.2009 30.05.2009
Иванов 08.06.2009 18.06.2009
Петров 01.05.2009 08.06.2009
Сидоров 04.05.2009 11.05.2009


select x.ФИО,min(x.datefrom) as dfrom,x.datetill
from (
SELECT фиодата.ФИО
               , min(фиодата_2.Дата_Начала) as datefrom
               , max(фиодата_1.Дата_Окончания) as datetill
FROM (фиодата LEFT JOIN фиодата AS фиодата_1 ON фиодата.ФИО = фиодата_1.ФИО 
              AND фиодата.Дата_Окончания >= фиодата_1.Дата_Начала 
              AND фиодата_1.Дата_Окончания>=фиодата.Дата_Начала)
LEFT JOIN фиодата AS фиодата_2 ON  фиодата.ФИО = фиодата_2.ФИО 
             AND фиодата.Дата_Начала <= фиодата_2.Дата_Окончания  
             AND фиодата_2.Дата_Начала<=фиодата.Дата_Окончания
group by фиодата.ФИО, фиодата.Дата_Начала) as x
group by x.ФИО,x.datetill

може как то так чтоле

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList