【问题标题】:Running Sum output wrong order运行 Sum 输出错误的顺序
【发布时间】:2021-03-22 06:11:38
【问题描述】:

我需要我的表的运行总和,我在其中编写了我的代码,但无法让它工作。

这就是我得到的

这就是我需要的

这是我的代码

SELECT 
id,
date
saldo,
cast(sum(saldo) over (order by date ROWS UNBOUNDED PRECEDING) as float) as running_Total

FROM orders

order by date desc;

我根本无法理解问题所在。我已经在互联网上搜索了几个小时。我也无法将小数点和逗号移动到正确的位置。

谢谢!

【问题讨论】:

  • (1) 请用您正在运行的数据库标记您的问题:mysql、oracle、postgresql...? (2)saldo列的数据类型是什么?
  • 我在其他一些数据上测试了我的代码并且它有效。我需要弄清楚的数据存在某种问题。

标签: mysql sql sql-order-by window-functions


【解决方案1】:

对于 SELECT 语句,您只需要按日期降序排序,例如

SELECT id, date, saldo,
       SUM(saldo) OVER (ORDER BY date ROWS UNBOUNDED PRECEDING) AS running_Total
FROM orders
ORDER BY date DESC

Demo

【讨论】:

  • 感谢您的回答。你说得对,我需要在 desc 中添加我的订单。
  • 我可以问你一个后续问题吗?我在其他一些数据上尝试了代码,它可以正常工作,还添加了日期 desc。但是,它将值输出为我认为的字符串。如果我需要将输出值格式化为数字,代码会如何?谢谢!
  • 您的 DBMS 是什么,您能否在演示中分享您的努力,例如答案中的链接?顺便说一句,@Kasper 的数据类型是 date 列字符串(或类似字符串,例如 varchar、varchar2)@Kasper?
  • 当然!我更改了代码并添加了格式更改。我正在使用mysql,日期格式为日期。基本上,我需要与 Saldo 中相同的格式。我应该指定小数应该如何?
  • 我找到了解决方案!感谢您的帮助!
【解决方案2】:

我怀疑您的数据中实际上有多个ids,而您需要的是partition by

SELECT id, date saldo,
       sum(saldo) over (partition by id order by date ROWS UNBOUNDED PRECEDING) as running_Total
FROM orders
ORDER BY id, date;

【讨论】:

  • 是的,这也是个好主意。谢谢你的回答!
猜你喜欢
  • 2015-03-04
  • 2023-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-02
  • 2015-02-10
  • 2014-12-12
  • 1970-01-01
相关资源
最近更新 更多