请问,图中的计算方式SQL语句要怎么写?

image.png

ljinyong2019 发布于 2022-2-24 09:19
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共7回答
最佳回答
0
CD20160914Lv8专家互助
发布于2022-7-27 20:55

我使用的sql server2019   lead函数与lag函数是从2012版本以后引入的。之前的没有。。

select 

 t.日期,

 t.数量,

 lag(数量,1) OVER (

 ORDER BY 日期) as 上一条,

 数量-isnull(lag(数量,1) OVER (

 ORDER BY 日期),0) as 相减 

 from(

select  '2022/02/25' as 日期,-600 as 数量

union all

select '2022/02/27' as 日期,-2600 as 数量

union all

select  '2022/02/28' as 日期,-4600 as 数量)t 

image.png

最佳回答
0
krystal033Lv7高级互助
发布于2022-2-24 09:21
最佳回答
0
linbodingLv6中级互助
发布于2022-2-24 09:22(编辑于 2022-2-24 09:39)

 select e.ename, e.sal,

       (select sum(d.sal) from emp d

          where d.empno <= e.empno) as running_total

   from emp e

  order by 3

image.png

最佳回答
0
shirokoLv6资深互助
发布于2022-2-24 10:10(编辑于 2022-2-24 10:11)

如果是oracle 可以用lead lag来写

https://blog.csdn.net/pelifymeng2/article/details/70313943

SQL server 应该也有的版本支持,可以试试

最佳回答
0
帆软用户MJJW81b1DrLv3见习互助
发布于2022-2-24 10:41(编辑于 2022-2-24 10:41)

1

最佳回答
0
shad0wLv2见习互助
发布于2022-2-24 21:17(编辑于 2022-2-24 21:30)

不确定你用的是什么数据库,如果每天的数据都是不同,可以对每一行数据按日期排序,然后关联自己互减就行

with tab1 as (     select     sum_date --日期     ,v_cnt --数量     ,row_number() over(order by sum_date) as rn     from v_tab --你用的表 ) select t1.sum_date --当前日期 ,t1.v_cnt --值 ,t1.v_cnt - t2.v_cnt --计算结果 from tab1 as t1 --当前日期 left join tab1 as t2  --上一日期 on t1.rn - 1 = t2.rn ;

如果只是单一日期字段,当然也可以简单点不用row_number() 的形式实现

select t1.sum_date --当前日期 ,t1.v_cnt --值 ,t1.v_cnt - t2.v_cnt --计算结果 from v_tab as t1 --当前日期 left join v_tab as t2  --上一日期 on date_sub(t1.sum_date,interval 1 day) = t2.sum_date ;

逻辑上是一样的,但更推荐用row_number()的写法

最佳回答
0
小灰灰李Lv3见习互助
发布于2022-2-25 14:28

select   VENDOR_ID, SEGMENT1,cs,(SEGMENT1-cs)as JS  from

(select  a.VENDOR_ID , a.SEGMENT1,lag(a.SEGMENT1,1,0) over (order  by  a.VENDOR_ID )as cs 

 from ap_suppliers    a ) 

对应表名和列名,换成你自己实际的表

image.png

  • 8关注人数
  • 644浏览人数
  • 最后回答于:2022-7-27 20:55
    请选择关闭问题的原因
    确定 取消
    返回顶部