如何通过比较它们之间的值来从表中选择第二个最大值

时间:2014-12-10 23:26:44

标签: sql-server

我正在处理一个项目,我需要为每个帐户选择“余额”字段的最大值。但是如果我们还有一个符号相反的行,我们应该从搜索中删除这对2行并选择第二个最高值。这是一个例子:

Tablet1 (Account varchar(10), Balance money)

A1, 100
A1, 50
A1, -100
A1, 30

所以搜索应该返回50,因为我们有100和-100。

1 个答案:

答案 0 :(得分:3)

一种方法是使用EXCEPT删除相反的对,然后以常规方式处理重新数据。

SELECT account, MAX(balance)
FROM (SELECT account, balance
      FROM   table1
      WHERE  balance > 0
      EXCEPT
      SELECT account, -balance
      FROM   table1
      WHERE  balance < 0) data
GROUP BY account

SQLFiddle demo

EXCEPTUNION的相反方式工作,从第一个数据集中删除第二个数据集中的所有相应数据。