【发布时间】:2018-06-22 09:40:27
【问题描述】:
如果 Current CLUSTERn = Previous CLUSTERn 然后将 Previous PRODCAT 作为 PREVCAT 添加到当前行...
ORA-30484: missing window specification for this function
30484. 00000 - "missing window specification for this function"
*Cause: All window functions should be followed by window specification,
like <function>(<argument list>) OVER (<window specification>)
*Action:
Error at Line: 11 Column: 30
SELECT CLUSTERn,
MEMBERn,
COUNT(*) OVER ( PARTITION BY CLUSTERn ORDER BY MEMBERn, PRODCAT, STARTd, ENDd ) AS NEWRANK,
CASE WHEN CLUSTERn = LAG(CLUSTERn) THEN LAG(PRODCAT) ELSE 'New' END AS PREVCAT,
STATUS,
PRODCAT,
JOINTYPE,
JOINRANK,
CSP,
PROGID,
PROMNAME,
PROMOID,
COHORT,
FWEEK,
STARTd,
ENDd,
SOURCE
FROM(
【问题讨论】:
-
您的查询非常不完整。您可以更好地判断您的查询出了什么问题。有了更多信息,我们将能够更好地为您提供帮助(如果有错误消息,输入/输出(预期和实际)等)
-
Case >> When >> Then>> Else>> End -
对于初学者:
CLUSTERn = LAG(CLUSTERn) = LAG(PRODCAT)是错误的,你不能“附加”这样的相等条件(无论你在哪里使用它们) -
“缺少窗口规范”有什么不清楚的地方?
-
@Gavin LAG 是一个分析函数,因此您需要为其提供窗口规范,就像您在上一行中使用的分析版本的 COUNT 一样。如果您对分析函数不清楚,我强烈建议您阅读它们。在您的情况下,只有您知道“上一行”的定义(因为您没有告诉我们那一点逻辑);这就是需要进入(当前缺失的)
OVER ()子句以告诉 Oracle 如何选择上一行的内容。
标签: sql oracle lag window-functions