Sql 选择最小行
我有一张类似的桌子:Sql 选择最小行,sql,tsql,sql-server-2008-r2,Sql,Tsql,Sql Server 2008 R2,我有一张类似的桌子: Date Value 20150201 5 20150205 6 20150206 0 20150207 5 20150208 0 20150209 9 20150219 7 我想选择最后一次0之后的行,日期最短。在上面的示例中,最后一个0出现在日期20150208,因此我想选择它后面的一行日期为20150209。日期不同 例如,如果不存在值为0的事件,则应选择具有最小日期的行。我正在使用SQLServer2008R
Date Value
20150201 5
20150205 6
20150206 0
20150207 5
20150208 0
20150209 9
20150219 7
我想选择最后一次0之后的行,日期最短。在上面的示例中,最后一个0出现在日期20150208,因此我想选择它后面的一行日期为20150209。日期不同
例如,如果不存在值为0的事件,则应选择具有最小日期的行。我正在使用SQLServer2008R2。因此,我无法在此使用超前和滞后窗口函数。您可以通过以下操作在SQL Server 2012+中获得最后一行的零值:
select top 1 t.*
from (select max(case when value = 0 then date end) over (order by date) as date0
from t
) t
where date > date0 or date0 is null
order by date;
在SQL Server 2008中,可以使用相关子查询:
select top 1 t.*
from t
where t.date > nullif((select max(date) from t t2 where t2.value = 0), '1900-01-01')
order by date;
注意:在这种情况下,NULLIF比COALESCE更可取,因为SQL Server的COALESCE实现特别差-它会对第一个参数求值两次。tnanks。但我们能不能不使用TOP呢。我已经简化了上述问题,以便简单地回答问题。实际上还有一个列ID,上面的信息是针对ID=1的。我想为每个ID返回带有上述逻辑的表。谢谢。我想出来了