2017-10-12 121 views
0

我已經繼承了一個Oracle數據庫並用於MySQL,我正在努力獲取我需要的數據。Oracle - 此功能缺少窗口規範

我想從TTDINV700732和TTCCOM001732中獲取記錄,其中TTDINV700732中的最大(日期)是一年前的GTEQ,而今天的日期是GTEQ的連接表TTDINV150732中有記錄。

我得到的錯誤

[99999][30484] ORA-30484: missing window specification for this function

這裏是我的SQL

SELECT 

    first_value(trim("TTDINV700732"."T$ITEM")) AS "item", 
    first_value("TTDINV700732"."T$CWAR") AS "whse", 
    max("TTDINV700732"."T$TRDT") AS "date", 
    first_value("TTCCOM001732"."T$NAMB") AS "business" 

    FROM "DB"."TTDINV700732" "TTDINV700732" 


    LEFT OUTER JOIN "DB"."TTIITM001732" "TTIITM001732" ON "TTDINV700732"."T$ITEM"="TTIITM001732"."T$ITEM" 
    LEFT OUTER JOIN "DB"."TTCCOM001732" "TTCCOM001732" ON "TTIITM001732"."T$CPLB"="TTCCOM001732"."T$EMNO" 
    LEFT OUTER JOIN "DB"."TTDINV150732" "TTDINV150732" ON "TTDINV150732"."T$ITEM"="TTDINV700732"."T$ITEM" 


    where "TTDINV700732"."T$TRDT" <= to_date('12 Oct 2016', 'DD MON YYYY') 
    and "TTDINV700732"."T$QUAN" < 0 
    and "TTDINV150732"."T$DATE" >= to_date('12 Oct 2017','DD MON YYYY') 

    group by "TTDINV700732"."T$ITEM", "TTDINV700732"."T$CWAR" 
+0

在Oracle中'FIRST_VALUE'分析函數只能與一個窗口子句一起使用,例如'FIRST_VALUE OVER(按列逐列分列)'。示例請參閱:https://oracle-base.com/articles/misc/first-value-and-last-value-analytic-functions –

回答

0
  1. 其中最大(日)在TTDINV700732是GTEQ一年前(今天)

如果您過濾該表格爲<= to_date('12 Oct 2016', 'DD MON YYYY'),那麼最大值不能超過您指定的日期,那是故意的還是正確的?或者,是否需要子查詢才能獲得MAX()日期,然後使用HAVING MAX(T$TRDT) <= to_date('12 Oct 2016', 'DD MON YYYY')??

  • ...連接表TTDINV150732其中日期今天
  • GTEQ如果這是等於今天,或大於和等於??

    會這樣的工作?

    SELECT 
         t700732.t$item AS item 
         , t700732.t$cwar AS whse 
         , t700732.mx_date AS mx_date 
         , ttccom001732.t$namb AS business 
    FROM (
        SELECT ttdinv700732.t$item , ttdinv700732.t$cwar, MAX(ttdinv700732.t$trdt) mx_date 
        FROM db.ttdinv700732 
        WHERE ttdinv700732.t$quan < 0 
        GROUP BY ttdinv700732.t$item , ttdinv700732.t$cwar 
        HAVING MAX(ttdinv700732.t$trdt) <= To_date('12 Oct 2016', 'DD MON YYYY') 
        ) t700732 
    INNER JOIN db.ttdinv150732 ON t700732.t$item = ttdinv150732.t$item 
    LEFT OUTER JOIN db.ttiitm001732 ON ttdinv700732.t$item = ttiitm001732.t$item 
    LEFT OUTER JOIN db.ttccom001732 ON ttiitm001732.t$cplb = ttccom001732.t$emno 
    where ttdinv150732.t$date >= To_date('12 Oct 2017', 'DD MON YYYY') 
    

    您可能會發現解決這個問題更容易,就像它是MySQL,而不是嘗試Oracle尚未熟悉的功能。