【发布时间】:2023-03-14 00:40:01
【问题描述】:
我正在使用以下查询。
SELECT SYSDATE,(SELECT P_PRICE_OPEN FROM GTT_ADJ_PRICE_TABLE WHERE FSYM_ID='P8R3C2-R' AND P_DATE='22-OCT-18' AND P_VOLUME<>0 AND ROWNUM=1) FROM DUAL;
GTT_ADJ_PRICE_TABLE 是全局临时表,当我执行与之相关的函数时加载了值。此 GTT 在提交后保留行。这个查询给了我正确的结果。
但是,如果我运行查询
SELECT WEEK_END, WEEK_START,
(SELECT P_PRICE_OPEN FROM GTT_ADJ_PRICE_TABLE WHERE P_DATE=WEEK_START) AS WEEKS_OPEN_PRICE,
(SELECT MAX(P_PRICE_HIGH) FROM GTT_ADJ_PRICE_TABLE WHERE FSYM_ID=FID AND P_DATE<=WEEK_END
AND P_DATE>=WEEK_START AND P_VOLUME<>0) AS WEEKLY_HIGH,
(SELECT MIN(P_PRICE_LOW) FROM GTT_ADJ_PRICE_TABLE WHERE FSYM_ID=FID AND P_DATE<=WEEK_END
AND P_DATE>=WEEK_START AND P_VOLUME<>0) AS WEEKLY_LOW,
(SELECT SUM(P_VOLUME) FROM GTT_ADJ_PRICE_TABLE WHERE FSYM_ID=FID AND P_DATE<=WEEK_END
AND P_DATE>=WEEK_START AND P_VOLUME<>0) AS WEEKLY_VOLUME,
P_PRICE
FROM (
SELECT ROWNUM,FID,WEEK_END,P_VOLUME,P_PRICE,
(SELECT P_DATE FROM FP_V2_FP_BASIC_PRICES WHERE FSYM_ID=FID AND P_DATE>=TRUNC(WEEK_END, 'IW') AND P_VOLUME<>0 AND ROWNUM=1) AS WEEK_START
FROM (
SELECT
ROWNUM,FSYM_ID AS FID, WEEK_END,P_VOLUME, P_PRICE,P_PRICE_OPEN,P_PRICE_HIGH,P_PRICE_LOW
FROM (
SELECT ROWNUM,FSYM_ID,P_DATE AS WEEK_END, P_PRICE,P_VOLUME, P_PRICE_OPEN,P_PRICE_HIGH,P_PRICE_LOW,
CASE
WHEN (TO_CHAR(P_DATE,'D') >= AVG(TO_CHAR(P_DATE,'D')) OVER (order by P_DATE DESC rows between 1 preceding and current row) and ROWNUM>=1) or TO_CHAR(P_DATE,'D')=6
THEN 1
ELSE 0
END AS WEEKFLAG
FROM(
SELECT * FROM TABLE (ADJUSTED_PRICE('P8R3C2-R')) WHERE P_VOLUME<>0
)
)WHERE WEEKFLAG=1
)
);
它在 WEEKS_OPEN_PRICE、WEEKLY_HIGH、WEEKLY_LOW、WEEKLY_VOLUME 中给我 NULL。 请帮我解决问题。感谢期待。
【问题讨论】:
-
@XING 如果我使用 select * FROM GTT_ADJ_PRICE_TABLE; 我会收到查询行数为 8000+。
-
你的查询真的很难理解,写的不是很好。如果您显示您的输入内容和预期输出内容,那么任何人都可以更轻松地回复。
-
@XING 有一个名为 ADJUSTED_PRICE('P8R3C2-R') 的函数将值加载到名为 GTT_ADJ_PRICE_TABLE 的 GTT。同样,我试图获得 11 周和 40 周的平均值以及每周的高点和低点。如果仍然不明白,我可以尝试缩短我的查询并只保留必要的部分。
-
可读性是一项功能。您的查询布局不正确,这意味着我们无法在不滚动的情况下阅读它。而且它完全是大写的,这使得它更难阅读。您的查询似乎不必要地复杂,因为它具有可疑数量的嵌套子查询。最后,您还没有解释您要实现的业务逻辑。如果您希望人们花时间帮助您,您应该降低理解您的查询所涉及的挑战级别。您永远不会知道,重新编写查询以使其易于理解可能会引导您找到您寻求的答案。
-
@APC 我已经更新了查询以便更好地理解。为之前的输入道歉。