Должно быть возможно использовать что-то вроде этого:
выберите раздел, объедините (выберите значение avg (цена) из таблицы iq1, где Listingdate> dateadd (день, -10, getdate ()) и oq.section = iq1.section, выберите значение avg (цена) из таблицы iq2, где Listingdate> dateadd (день, -30, getdate ()) и oq.section = iq2.section, 0) как средняя цена из таблицы oq сгруппировать по разделам
Пара заметок:
извините, я не перед своим компьютером, поэтому я не смог прочесть это доказательство, и скобки могут быть сняты, но это идея общего объединения с первым критерием и при условии, что нет записей, среднее значение должно возвращать ноль и используйте второй критерий, и если у него нет ни одного, окончательно 0.
Другое дело - использовать функцию добавления даты, как указано выше, чтобы сделать выражение SARGable и там использовать индексы.
Надеюсь, это поможет,
Стив
EDIT
Вот код, на котором я провел базовое тестирование. Это просто и даст вам сначала среднее значение для этого раздела за последние 10 дней, в противном случае, за последние 30 дней для раздела, если не за последние 10 дней для всех разделов и если не за последние 30 дней для всех разделов , Это также даст avergageType 1,2,3 или 4 соответственно.
Я заранее прошу прощения за состояние отображения SQL - мне еще предстоит решить, как правильно отформатировать его - и это действительно поздно:)
выберите sectionID,
объединение (
(выберите avg (Price) из цен iq1, где Listingdate> dateadd (день, -10, getdate ())
и> oq.sectionID = iq1.sectionID),
(выберите avg (цена) из цен iq2, где Listingdate> dateadd (день, -30, getdate ())
и> oq.sectionID = iq2.sectionID),
(выберите avg (Цена) из цен iq1, где Listingdate> dateadd (день, -10, getdate ())),
(выберите avg (Цена) из цен iq1, где Listingdate> dateadd (день, -30, getdate ( ))),
0) как средняя цена,
СЛУЧАЙ КОГДА (выберите> avg (цена) из цен iq1
где Listingdate> dateadd (день, -10, getdate ()) и
oq.sectionID = iq1.sectionID) НЕЛЬЗЯ ТОЛЬКО 1, Иначе
СЛУЧАЙ КОГДА (выберите> avg (цена) из цен iq2
где Listingdate> dateadd (день, -30, getdate ()) и
oq.sectionID = iq2.sectionID) НЕЛЬЗЯ ПОТОМ 2, В противном случае
СЛУЧАЙ КОГДА (выберите> avg (цена) из цен iq1
где Listingdate> dateadd (день, -10, getdate ())) не равен 3
ELSE
СЛУЧАЙ КОГДА (выберите> avg (цена) из цен iq1
где Listingdate> dateadd (день, -30, getdate ())) не равен NULL THEN 4
ELSE
5 END END END END AS AverageType от цен oq
где sectionID = @SectionID группа по sectionID