我有一个简单的select查询,它根据日期范围提供输出:
Declare @prevDate as Date
@prevDate = (Select Max(myDates) From Top40Table Where mydates < '2012/05/03' And PrimID=1)
Select
myDates, (P1/(Lag(P1) Over (Order by myDates))-1) As myRet
From
Top40Table
Where
(myDates Between @prevDate and '2012/05/10')
And PrimID = 1这是一个典型的结果集:
myDates myRet
2012-05-02 NULL
2012-05-03 -0.0173786439241019
2012-05-04 -0.0268509853003636
2012-05-07 -0.00941786149400936
2012-05-08 -0.0134267235683988
2012-05-09 0.00633992501692782
2012-05-10 0.0203276794347731select查询是正确的,并执行它应该做的事情,得到prevDate 2012/05/02以完成计算。但我不希望myRet列中有空输出的2012/05/02行。我可以将myDates和myRet数据插入一个临时表(@TempTable)中,然后将只选择myDates和myRet,其中myRet不是该表中的Null。
是否有一种更简单的方法来做到这一点,而不必创建一个@TempTable,然后再创建另一个select查询?我使用Server 2012
发布于 2014-02-10 20:00:31
使用子查询:
select *
from (
select myDates
, (P1/(Lag(P1) Over (Order by myDates))-1) As myRet
from Top40Table
where myDates Between @prevDate and '2012/05/10'
and PrimID = 1
) as SubQueryAlias
where myRet is not null发布于 2014-02-17 20:53:03
@Andomar,它不是子查询,这是一个派生表,它总是从WHERE子句开始,子查询在WHERE子句之后开始。
https://stackoverflow.com/questions/21686045
复制相似问题