Вот простая таблица, которая описывает событие в календаре:
Event
--------------------
Id int
DayId int # Foreign key to Day table
Title varchar(32)
Start datetime
Finish datetime
И произвольный оператор SELECT для получения некоторого набора результатов:
select
Id,
DayId,
Title,
Start,
Finish
from Event
where Start > now()
order by Start
Приведенный выше запрос выбора вернет всех событий в будущем, что нежелательно. Но использование limit
означает, что вы должны знать, сколько вы хотите ограничить.
Я бы хотел иметь возможность выбрать первые X строк , которые имеют одинаковые DayId
значения.
Некоторые примеры, которые помогут лучше объяснить эту ситуацию:
Пример результатов:
Id: 26, DayId: 08, Title: "Foo", Start: "2012-03-19 23:00:00"
Id: 27, DayId: 08, Title: "Bar", Start: "2012-03-20 00:00:00"
Id: 28, DayId: 09, Title: "Baz", Start: "2012-03-21 09:00:00"
Id: 29, DayId: 10, Title: "Barbaz", Start: "2012-03-22 11:00:00"
Id: 30, DayId: 09, Title: "Fooboo", Start: "2012-03-25 15:00:00"
Предполагая, что приведенный выше запрос вернул результирующий набор, подобный этому, запрос, который я ищу, будет возвращать только первые две строки, поскольку они являются следующими происходящими событиями с тем же DayId .
Однако после 19 марта условие Start > now()
вернет другой набор результатов:
Id: 28, DayId: 09, Title: "Baz", Start: "2012-03-21 09:00:00"
Id: 29, DayId: 10, Title: "Barbaz", Start: "2012-03-22 11:00:00"
Id: 30, DayId: 09, Title: "Fooboo", Start: "2012-03-25 15:00:00"
И в этом случае результат должен возвращать только первую строку . Обратите внимание, что (для пояснения) последний результат имеет с тем же DayId, но поскольку он отделен другим DayId, его следует игнорировать.