gpt4 book ai didi

sql - 在没有子查询或子表的情况下按解析函数结果过滤

转载 作者:行者123 更新时间:2023-12-04 02:20:47 25 4
gpt4 key购买 nike

我正在从事 SQL 功能有限的 Netsuite 项目。很难测试,因为我基本上是在猜测他们在 GUI 中构建的 SQL。

我想将查询结果过滤为累积和为负值的结果。

以下是否是有效的 PL/SQL 结构(除了任何小的语法错误)?

 SELECT SUM(amount) OVER(PARTITION BY itemid ORDER BY date ROWS UNBOUNDED
PRECEDING) AS "sum" FROM table WHERE sum < 0

其次,由于 Netsuite 的限制,以下是有效的结构吗?

 SELECT SUM(amount) OVER(PARTITION BY itemid ORDER BY date ROWS UNBOUNDED 
PRECEDING) AS "sum" FROM table WHERE SUM(amount) OVER(PARTITION BY itemid
ORDER BY date ROWS UNBOUNDED PRECEDING) < 0

Oracle 的文档表明这些都不是有效的,过滤分析函数应该通过子查询完成,但一些谷歌组和其他网站建议不这样做。然而,大多数人在他们的示例中使用 RANK() 和 DENSE_RANK() 函数,它们的功能可能不同。

最佳答案

要过滤分析函数的结果,您必须使用内联 View (from 子句中的子查询)。

例如,您的查询可能如下所示:

select  *
from (
select itemid,
date,
sum(amount) over (
partition by itemid
order by date
rows between unbounded preceding
and current row
) as run_sum
from table
)
where run_sum < 0

这将显示该项目的运行总和小于零的所有项目以及相关日期(如果给定项目有任何此类日期)。

关于sql - 在没有子查询或子表的情况下按解析函数结果过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29868081/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com