我继承了一个oracle数据库并且习惯了MySQL我正在努力获取我需要的数据。
我正试图从TTDINV700732和TTCCOM001732获取记录,其中TTDINV700732中的最大(日期)是一年前的GTEQ,并且在联合表TTDINV150732中有记录,其中日期是今天的GTEQ。
我收到错误
[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 :(得分:0)
如果您为<= to_date('12 Oct 2016', 'DD MON YYYY')
过滤该表,那么没有最大值可能大于您指定的日期,那是故意/正确吗?或者,您是否需要子查询来获取MAX()日期然后使用HAVING MAX(T$TRDT) <= to_date('12 Oct 2016', 'DD MON YYYY')
??
这应该等于今天,还是等于 ??
这样的事情会起作用吗?
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功能。