请问错位相减的sql怎么写呀

image.png

FineReport 麦兜的兜 发布于 2024-8-1 20:19
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
0
CD20160914Lv8专家互助
发布于2024-8-1 22:41
最佳回答
0
阿德放Lv5见习互助
发布于2024-8-2 11:12(编辑于 2024-8-2 13:48)

这是什么数据库,需要用到递归才能实现

mysql  结果 

image.png

  • 麦兜的兜 麦兜的兜(提问者) 您好 这是oracle数据库
    2024-08-02 13:00 
  • 阿德放 阿德放 回复 麦兜的兜(提问者) 我这里没有装oracle,那你得从网上找递归查询的语法,然后 修改成你要的才行,mysql 我是执行成功了
    2024-08-02 13:48 
  • 阿德放 阿德放 回复 麦兜的兜(提问者) mysql 的 sql WITH RECURSIVE CTE AS ( -- ...(与上面相同,但使用RankedTable代替my_table,并在JOIN中使用rn) SELECT rt.date, rt.A, rt.B, rt.C, rt.D, rt.D AS PrevD, rt.rn FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY date) AS rn FROM test.sales) rt WHERE rt.rn = 1 UNION ALL SELECT rt.date, rt.A, rt.B, COALESCE(rt.C, c.PrevD) AS C, (c.PrevD + IFNULL(rt.A,0) - IFNULL( rt.B,0)) AS D, (c.PrevD + IFNULL(rt.A,0) - IFNULL( rt.B,0)) AS PrevD, rt.rn FROM ( SELECT *, ROW_NUMBER() OVER (ORDER BY date) AS rn FROM test.sales ) rt INNER JOIN CTE c ON rt.rn = c.rn + 1 WHERE rt.rn > 1 ) SELECT date, A, B, C, D FROM CTE ORDER BY date;
    2024-08-02 14:13 
  • 麦兜的兜 麦兜的兜(提问者) 回复 阿德放 你号 请问可以把完整的语句发给我吗,我看表结构都一样,我改改函数试试,子查询的CTE里面是什么啊
    2024-08-02 21:08 
最佳回答
0
0035705Lv5初级互助
发布于2024-8-2 13:51(编辑于 2024-8-2 13:54)
最佳回答
0
shirokoLv6资深互助
发布于2024-8-2 13:57

帆软单元格可以实现的,一定要sql实现的话oracle有开窗函数,lead和lag,多套几层肯定是可以的

  • 5关注人数
  • 404浏览人数
  • 最后回答于:2024-8-2 13:57
    请选择关闭问题的原因
    确定 取消
    返回顶部