您可以使用 group by 和 sum 来查找特定索赔的总值。除非您指定第一个索赔金额(除非您使用插入/默认顺序),否则无法找到差异。如果我们知道哪个是第一个,我们可以减去其他金额(或金额)。
如果每个声明只有两个条目,您可以获得first()
和last()
条目之间的绝对差异。
select claim, abs(last(amount) - first(amount)) from claims group by claim;
您还可以根据插入顺序获得非绝对差异:
select claim, (last(amount) - first(amount)) from claims group by claim;
更新
由于许多数据库不支持first()
并且last()
不支持,以下是替代方案:
MySQL
select distinct claim,
(select amount from claims c1 where c1.claim = c2.claim limit 1,1) -
(select amount from claims c1 where c1.claim = c2.claim limit 0,1) as "Difference"
from claims c2;
SQLFiddle:http ://sqlfiddle.com/#!2/2e62a0/15
微软 SQL
对于 MS SQL,由于很难从集合中获取底部 X 记录,因此我使用了以下average()
函数:
SELECT claim, ((avg(amount)*2) -
(SELECT top 1 amount
FROM claims c2
WHERE c2.claim = c.claim))-
(SELECT top 1 amount
FROM claims c2
WHERE c2.claim = c.claim)
FROM claims c
GROUP BY claim;
进一步简化为:
SELECT claim,
2* ( avg(amount) -
(SELECT top 1 amount
FROM claims c2
WHERE c2.claim = c.claim))
FROM claims c
GROUP BY claim;
SQL 小提琴:http ://sqlfiddle.com/#!3/2e62a/28