首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过mysql查询获取记录差值之和

如何通过mysql查询获取记录差值之和
EN

Stack Overflow用户
提问于 2013-04-19 16:07:30
回答 2查看 175关注 0票数 1

我有一个表格,如下

代码语言:javascript
复制
Value          Count
value1         55
value2         60
value3         65
value4         20
value5         25
value6         45
value7          5
value8         25

我需要一个查询,它取两个连续计数之间的差值并对它们求和。一个条件是,如果下一个值小于前一个值,则考虑下一个值而不是差值。具体工作如下

代码语言:javascript
复制
Value          Count       Diff         Explanation
value1         55                       No diff as there is no previous value
value2         60            5          (60-55)
value3         75           15          (75-60) 
value4         20           20          (20 as 20 < 75)
value5         25            5          (25-20)
value6         45           20          (45-25)
value7          5            5          (5 as 5 < 45)
value8         25           20          (25-5)

查询应该给出所有差异的总和,即5+15+20+5+20+5+20 = 90

预先感谢您为我准备的精彩查询:-)

EN

回答 2

Stack Overflow用户

发布于 2013-04-19 16:49:00

您可以使用这个查询,假设您有一个表tbl(v,c) - v是value字段,c是count字段。

代码语言:javascript
复制
SELECT t1.v, t1.c as cnt1,
    case 
      when t2.c is null then 0
      when t2.c > t1.c then t1.c
      else t1.c - t2.c
    end as diff
FROM TBL T1
left outer JOIN TBL T2 ON T1.v > T2.v
where not exists (
   SELECT * 
   FROM TBL T3 WHERE T3.V < T1.V AND T3.V > T2.V
)

顺便说一句,result value3应该是65,而不是75

我做了一个Fiddle来测试它

票数 2
EN

Stack Overflow用户

发布于 2013-04-19 16:13:36

您可以使用coalesce来解决此问题

代码语言:javascript
复制
select a.Value,a.count
coalesce(a.count- 
    (select b.countfrom table_name b where b.count= a.count+ 1), a.count) as diff
from table_name  a

但是这解决了你一半的问题。我不知道第二个问题的答案

see here

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16100097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档