我正在处理一个项目,我需要为每个帐户选择“余额”字段的最大值。但是如果我们还有一个符号相反的行,我们应该从搜索中删除这对2行并选择第二个最高值。这是一个例子:
Tablet1 (Account varchar(10), Balance money)
A1, 100
A1, 50
A1, -100
A1, 30
所以搜索应该返回50,因为我们有100和-100。
答案 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
EXCEPT
以UNION
的相反方式工作,从第一个数据集中删除第二个数据集中的所有相应数据。