SQL Server查询以查找上次出现的大于0的数字。若并没有大于0的数字,那个么查询应该返回0

SQL Server查询以查找上次出现的大于0的数字。若并没有大于0的数字,那个么查询应该返回0,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个数据如下 案例A: Amount (column name) ------ 0 0 450 890 0 0 案例B: Amount (column name) ------ 0 0 0 0 0 0 如果是“A”,查询应返回890 在“B”情况下,查询应返回0 我正在寻找返回预期结果的SQL Server查询。假设您有一个排序,最简单的方法可能是: select coalesce(max(amount), 0) from (select top (1) amount fro

我有一个数据如下

案例A:

Amount (column name)
------
0
0
450
890
0
0
案例B:

Amount (column name)
------
0
0
0
0
0
0
如果是“A”,查询应返回890 在“B”情况下,查询应返回0
我正在寻找返回预期结果的SQL Server查询。

假设您有一个排序,最简单的方法可能是:

select coalesce(max(amount), 0)
from (select top (1) amount
      from t
      where amount > 0
      order by <ordering column> desc
     ) t;

如果不指定顺序,则Last没有任何意义。表中的行没有自然顺序。仅仅因为您以上面的特定顺序呈现了它们,并不意味着SQL Server将使用该顺序—如果没有可用于指定行顺序的附加列添加到@HoneyBadger的注释中,关系数据库表是一组无序的行,因此您需要叠加顺序来确定第一行或最后一行。也许您希望MAXAmount获得表中的最高值?您的描述与标题不匹配。您说的是最后一个值,但您的描述说查询A应该返回890。890是向下的第四行,它们被列出的最后一个顺序是0。它应该是0,因为这是最后一次。看起来你想要的是MAX.@Larnu,最后一个正值,0通常不被认为是正值,尽管不是每个人都同意这一点