У меня есть таблица (в MS Access), в которой в каждой записи хранится дата начала и окончания одного события, связанного с элементом. С каждым элементом может быть связано несколько событий, и периоды времени события могут перекрываться.
Я буду использовать термин «открытое событие» для обозначения события с начальной датой меньше и конечной датой больше указанной даты.
Я бы хотел запрос, который дает мне список элементов, которые имели по крайней мере одно событие открытия в течение данного периода времени, но также имеют нет событий открытия в конце периода времени. В идеале я также хотел бы перечислить для каждого из этих элементов идентификатор последнего открытого события за период времени.
Вот список записей о событиях, которые представляют некоторые случаи, которые мне нужно было охватить. Рассматриваемый период времени с 2012-03-20 по 2012-03-30:
eventId itemId startDate endDate
e1 i1 2012-03-21 2012-03-23 -- event open entirely inside of time period
e2 i2 2012-03-19 2012-03-21 -- event open at start date
e3 i3 2012-03-29 2012-03-31 -- event open at end date
e4 i4 2012-03-19 2012-03-26 -- multi-event item with event open at end date
e5 i4 2012-03-22 2012-03-25
e6 i4 2012-03-29 2012-03-31
e7 i4 2012-04-01 2012-04-30
e8 i5 2012-03-19 2012-03-25 -- multi-event item with no events open at end date
e9 i5 2012-03-22 2012-03-29
e10 i5 2012-03-25 2012-03-26
e11 i5 2012-04-01 2012-04-30
e12 i6 2012-03-13 2012-03-19 -- event not in time period at all
А вот элементы (и их последние открытые события), которые я хотел бы видеть в результате этого запроса:
i1, e1
i2, e2
i5, e9 -- note that e9.endDate > e8.endDate and e10.endDate, and that e11 falls after the time period in question, so is not considered the last event for the item