问题标签 [analytic-functions]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - 引用Oracle中先前计算值的值
如何从 SQL 查询中的前一行引用计算值?在我的情况下,每一行都是一个事件,它以某种方式操纵前一行的相同值。
原始数据如下所示:
假设每个 Eventtype=OUT 应该是名为 Remaincharge 的列中前一行总电荷的一半:
我已经尝试过 LAG 分析函数,但这不允许我从前一行获得计算值。尝试过这样的事情:
LAG(remaincharge, 1, totalcharge) OVER (PARTITION BY ...) as remaincharge
但这不起作用,因为找不到剩余电荷。
任何想法如何实现这一目标?需要一个分析函数,它可以给我累积总和,但给定一个函数,而不是访问以前的值。
先感谢您!
更新问题描述
恐怕我的示例问题很笼统,这里有一个更好的问题描述:
剩余的总费用由outqty /(previous剩余数量)的比率决定。
sql - 使用分析函数的下一步操作
为了需要进行群组分析,我正在尝试获取每个客户的下一步操作(取消订阅、升级、降级......)
我有一个包含以下数据的月度快照:
如您所见,该操作仅在完成的月份才知道,在 01-01-2012 月份我们还不知道客户在 2012 年 4 月 1 日降级,因此我们无法分析他的相对使用行为到他降级的月份。退订也是一样。
所需的数据集如下:
我可以使用 last_value 分析函数轻松获得退订日期,但没有找到获取降级日期的方法。
这是我的 SQL 查询:
任何获取“下一个”行动日期的方法,例如“downgrade_date”。
我正在使用甲骨文。
sql - 百分位数的另一种方法?
我有一个数据集,它基本上由作业批次列表、每个批次中包含的作业数量以及每个作业批次的持续时间组成。这是一个示例数据集:
现在,我想计算持续时间字段的一些百分位数。通常,这是通过以下方式完成的:
(结果为 9)
我的问题是我们不想根据批次获得百分位数,我想根据个人工作获得百分比。通过生成job_count的运行总数,我可以很容易地手动计算出来:
因为我有 579 个工作,所以第 75 个百分位将是工作 434。查看上面的结果集,对应的持续时间为 7,与标准函数的作用不同。
本质上,我想将批次中的每个作业视为单独的观察,并根据这些而不是批次确定百分位数。
有没有相对简单的方法来实现这一点?
sql - Oracle 中基于两个日期的排名
我有以下结果的查询:
我想我可以用dense_rank
一个时间间隔对用户段进行分组。但它不起作用。
我想要这样的东西:
你知道我该如何解决这个问题吗?
sql - Vertica - 创建日历表
我在 Vertica 中遇到与不存在的填充日期相关的问题。我在网上看到了人们建议创建日历表的解决方案。这是来自stackoverflow的一个这样的MYSQL问题。
有没有办法使用另一个表中的 min() 和 max() 可用日期创建日历表,只使用 Vertica 支持的 SQL 而不使用任何程序?到目前为止,我遇到的大多数解决方案都是基于 T-SQL 的,并且日期是使用过程生成的。不幸的是,我 Vertica 并没有那么多 PL/SQL 或 T-SQL 能力。但是有一些我怀疑可能能够解决我的问题的分析功能。
sql - 窗口函数的附加函数
非常感谢您的窗口功能!!!
我很好奇是否会支持更多“基本”聚合:
尝试使用 Sum() 的当前结果:
Error: Unrecognized Analytic Function: SUM cannot be used with an OVER() clause.
sql - 如何编写 SQL 以在一行中获取累积值和每月总计?
说,我有以下数据:
我想得到如下结果:
在此表中,对于 Bob,他的总销售额从一开始就是 41。而对于这个月,也就是 7 月,他整个月的销售额是 24。Ann 也是如此。
如何编写 SQL 以获得此结果?
sql - Oracle 分析函数 - 重置窗口子句
我有以下数据集。
我的目标是创建一个排名列,每次部门更改时都会重置。我可以用于“partition by”子句的最接近的列是 dept,但这不会给我想要的结果。
所需的输出如下。最后一个 rnk=1 是因为 Jan-04 记录是更改后的第一个记录。
任何指针?
oracle - Oracle 11g - 对数百万行执行分析功能
我的应用程序允许用户收集测量数据作为实验的一部分,并且需要能够报告曾经进行的所有测量。
下面是我拥有的表格的一个非常简化的版本:
在我的数据库中有 2000 个实验,每个实验有 18 个用户。每个用户有 6 个样本要测量,每个样本将进行 100 次测量。
这意味着数据库中当前存储了 2000 * 18 * 6 * 100 = 21600000 个测量值。
我正在尝试编写一个查询,该查询将为每个用户获取测量参数 1 和 2 的 AVG() - 这将返回大约 36,000 行。
我的查询非常慢 - 我已经让它运行了 30 多分钟,但它什么也没回来。我的问题是:有没有获得平均值的有效方法?实际上是否有可能在合理的时间内(比如 2 分钟)获得这么多数据的结果?还是我不切实际?
这是(又是一个简化版本)我的查询:
这将为每个 expt_id/user_id 组合返回一行以及 2 个测量参数的平均值。
sql - 如何从单个日期列-oracle 获取开始/结束日期
我在这里看到了一些精彩的答案,我需要修复。我还不想创建表或 ETL,我希望创建一个简单的数据库视图,用户可以先访问以进行测试。
表有 item#、item_ticket_color#、maint_date 和其他列 tick_col 有时会更新,但表中的其他列也会更新。如果某些其他列被更新或更改,则 tick_col 迭代。我需要过滤这些数据以获得以下预期结果,并且需要一些帮助来试图弄清楚我可以如何做到这一点。如果可能的话,我正在寻找直接的 SQL
我希望在下面看到这一点,它显示了票证颜色发生变化的每个场景的开始和结束日期。:
这是新代码,基于 Jasti 的贡献,我做了一些额外的更改,但这正是我想要的