|
|
|
| Есть запрос на выборку 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) | |
|
| |
|
|
|
| навскидку -
1 запрос по фио и первой дате с выявлением Min (группировки по ФИО)
2 запрос по фио и второй дате с выявлением Max (группировки по ФИО)
3. запрос по ФИО + запрос 1 + и запрос 2 с группировкой по ФИО. | |
|
| |
|
|
|
| Иванов 6.05.2009 30.05.2009
Иванов 8.06.2009 18.06.2009
Если два интервала дат не пересекаются, то я так понимаю один будет не включён, а нужны оба. | |
|
| |
|
|
|
| блин читал по диагонал сорь | |
|
| |
|
|
|
| http://am.rusimport.ru/MsAccess/topic.aspx?ID=319
http://www.sql.ru/forum/actualthread.aspx?bid=4&tid=895462 | |
|
| |
|
|
|
| спс за ссылку на мой же топик на другом форуме:) | |
|
| |
|
|
|
| ФИО 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
|
може как то так чтоле | |
|
| |