应该可以这样使用:
select section, coalesce(select avg(Price) from table iq1 where Listingdate > dateadd(day,-10,getdate()) and oq.section =iq1.section, select avg(price) from table iq2 where Listingdate > dateadd(day,-30,getdate()) 和 oq.section =iq2.section,0) 作为表 oq 中按部分分组的平均价格
几点说明:
对不起,我不在我的电脑前,所以我无法校对这个,括号可能已经出来了,但这是一般使用合并到第一个标准的想法,并且如果没有记录,平均值应该返回 null并使用第二个标准,如果没有最终为 0。
另一件事是使用上面的日期添加函数使表达式 SARGable 并且能够使用索引。
希望这会有所帮助,
史蒂夫
编辑
这是我进行基本测试的代码。这很简单,首先会给出该部分过去 10 天的平均值,否则为该部分的最后 30 天,所有部分的最后 10 天不合格,所有部分的最后 30 天不合格.它还将分别给出 1、2、3 或 4 的平均类型。
我提前为 SQL 显示的状态道歉 - 我还没有弄清楚如何很好地格式化它 - 真的太晚了 :)
选择sectionID,
合并 (
(从价格 iq1 中选择 avg(Price) where Listingdate > dateadd(day,-10,getdate())
和 > oq.sectionID = iq1.sectionID),
(从价格 iq2 中选择 avg(price) where Listingdate > dateadd(day,-30,getdate())
和 > oq.sectionID =iq2.sectionID),
(select avg(Price) from prices iq1 where Listingdate > dateadd(day,-10,getdate())),
(select avg(Price) from prices iq1 where Listingdate > dateadd(day,-30,getdate() )),
0 ) 作为平均价格,
CASE WHEN(从价格 iq1 中选择 > avg(Price)
其中Listingdate > dateadd(day,-10,getdate()) 和
oq.sectionID = iq1.sectionID) IS NOT NULL THEN 1 ELSE
CASE WHEN(从价格 iq2 中选择 > avg(price)
其中Listingdate > dateadd(day,-30,getdate()) 和
oq.sectionID =iq2.sectionID) 不为 NULL THEN 2 ELSE
CASE WHEN(从价格 iq1 中选择 > avg(Price)
其中 Listingdate > dateadd(day,-10,getdate())) 不是 NULL THEN 3
其他
CASE WHEN(从价格 iq1 中选择 > avg(Price)
其中 Listingdate > dateadd(day,-30,getdate())) 不是 NULL THEN 4
其他
5 END END END END AS AverageType 来自价格 oq
其中 sectionID = @SectionID 按 sectionID 分组