自动化岁月

问题描述 投票:0回答:1

选择不同的 PROPHIX_TIME,W_EXCH_RATE_YTD_ME_AVG_G.*,“欧元”TO_CUR 从 W_MCAL_DAY_D 开始 内连接 W_EXCH_RATE_YTD_ME_AVG_G ON MCAL_PERIOD = PD 地点 MCAL_YEAR IN(2019 年, 2020年, 2021年, 2022年, 2023年, 2024)

值在上述代码的 where 子句中被硬编码。 如果当前日期是 2025 年 1 月 1 日,则必须在 where 子句中添加其他年份。 例如 WHERE MCAL_YEAR IN (2019, 2020年, 2021年, 2022年, 2023年, 2024年, 2025年,......等等)

就像 WHERE MCAL_YEAR IN (2019, 2020年, 2021年, 2022年, 2023年, 2024年, 2025年,......等等)

sql plsql plsqldeveloper
1个回答
0
投票

看起来像行生成器问题。

假设起始年份是 2019 年,那么您可能使用的查询(因为今天是 2 月 22 日2024,即

sysdate
(没有时间部分))是

SQL> select 2019 + level - 1 as year
  2  from dual
  3  connect by level <= extract(year from sysdate) - 2019 + 1;

      YEAR
----------
      2019
      2020
      2021
      2022
      2023
      2024

6 rows selected.

SQL>

或者,就你而言,

SELECT DISTINCT prophix_time, w_exch_rate_ytd_me_avg_g.*, 'EUR' to_cur
  FROM w_mcal_day_d INNER JOIN w_exch_rate_ytd_me_avg_g ON mcal_period = pd
 WHERE mcal_year IN (    SELECT 2019 + LEVEL - 1 AS year
                           FROM DUAL
                     CONNECT BY LEVEL <= EXTRACT (YEAR FROM SYSDATE) - 2019 + 1);

你从来没有说过为什么列表从2019年开始;如果这是硬编码,则保持原样。如果没有,请以某种方式获取它。

© www.soinside.com 2019 - 2024. All rights reserved.