Вот сценарий: есть таблица программного обеспечения (PK = SoftwareID) и связанная таблица выпуска (PK = [SoftwareID, версия]).
Релиз может быть основным или второстепенным, тип релиза определяется с помощью Release.ReleaseType ('MAJ', 'MIN').
Релиз также характеризуется датой: Release.ReleaseDate.
Программное обеспечение разделено на категории, идентифицируемые по Software.CategoryID.
Проблема: нужен эффективный T-SQL-запрос для получения списка всех программных компонентов определенной категории с первой датой выпуска, попадающей в заданный интервал, ограниченный @DateFrom, @DateTo. Единственные столбцы, необходимые в окончательном наборе результатов, - это SoftwareID и ReleaseDate.
Это не реальный сценарий, но я сформулировал его таким образом, чтобы его было легче понять. В реальном случае таблица Release будет содержать около 10 миллионов записей, а таблица Software - около 1 миллиона. Я уже нашел решение, но оно довольно медленное, и я чувствую, что эксперты здесь могут найти что-то лучшее.
Вот мое медленное решение:
select s.SoftwareID, min(r.ReleaseDate)
from
Software s inner join Release r on (s.SoftwareID = r.SoftwareID)
where s.CategoryID = @Category
and r.ReleaseType = 'MAJ'
group by
s.SoftwareID
having
min(r.ReleaseDate) >= @DateFrom
and min(r.ReleaseDate) < @DateTo
Спасибо.