【问题标题】:Cummulative left overs using SQL使用 SQL 的累积剩余
【发布时间】:2013-01-09 19:04:54
【问题描述】:

我使用的是旧版本的 sybase,它没有像lead这样的关键字。

我想找到累积的剩余。

让我试着用一个例子来解释一下。

起始数量 = 500

类别 剩余时间 数量 猫 1 10:01:01.000 100 400 猫 1 10:01.01.001 50 350 猫 1 10:01:01.002 0 350 猫 1 10:01.01.003 100 250 猫 1 10:01:03.001 100 150

cat2 中有类似的行,每个类别的行数是可变的。

请注意,在上面我已经按时间升序排列了行。

【问题讨论】:

  • 500 - sum(quantity) over (partition by category order by time) 在符合标准的数据库中生成运行中的sum() 怎么样。
  • 你能不能给我写一个详细的代码。我不太擅长 SQL。

标签: sql sybase


【解决方案1】:

我不知道Sybase是否支持这个,但是在PostgreSQL、Oracle等你可以做到

select category,
       time,
       quantity, 
       500 - sum(quantity) over (partition by category order by time) as leftover
from the_unknown_table;
order by category, time

【讨论】:

  • 谢谢,试一试。
  • 我使用上面的代码得到以下错误:语法错误 - 键顺序必须是 RANGE Window Frame 中的数字数据。任何人都可以请帮忙。谢谢。
  • @user1949158 那么TIME的数据时间是多少?
  • 我的数据库中的时间是'timestamp'类型。因此,我的数据库中的时间示例是:'2012-03-23 11:27:04.870000'。谢谢
  • @user1949158:显然 Sybase 不支持这个,因为它在 Oracle 或 PostgreSQL 中工作。
【解决方案2】:

选择类别,SUM(500-(数量)) FROM 表名 按类别分组

选择类别,(count(1)*500)-sum(数量) FROM 表名 按类别分组

【讨论】:

    猜你喜欢
    • 2021-01-17
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    相关资源
    最近更新 更多