Oracle 中需要 12 个未来数字 SQL

12 future numbers required in Oracle SQL

我在 SQL 中有一项要求,其中 我们有几个市场 ID 比方说 20,30,40

在这里,对于每个使用一个 plsql 函数的市场,我们得到一个活动编号,假设对于市场 20,我得到 20210306,对于 mrkt 30,我们得到 20210307,对于 40 mrkt id 20210308。

现在我想为每个市场实现的目标是,我们应该将当前活动编号为 20210306 以及 12 个未来活动应该由 SQL 查询根据市场的每个当前活动生成。

我正在使用 union all 和 campaign+1,2,3 等等,这需要时间。我们有一些简短的逻辑吗?

请推荐 谢谢, 维杰

您可以使用带有 CONNECT BY 子句的 LEVEL 伪列生成一系列数据(数字或日期甚至字符)。 在您的情况下,听起来您想生成从 20210306 开始的接下来的 10 个数字。 可以这样做:

WITH current_campaign ( nr ) AS 
( SELECT 20210306 FROM dual )
SELECT
  nr + level
  FROM
  current_campaign
CONNECT BY
  level < 13;

  20210307
  20210308
  20210309
  20210310
  20210311
  20210312
  20210313
  20210314
  20210315
  20210316
  20210317
  20210318

20210306 也可以表示日期 2021 年 3 月 6 日。如果您想生成这些基于日期的数字,您也可以这样做。例如(从0629开始所以结果显示月份变化,只显示5行)

WITH current_campaign ( cdate ) AS 
( SELECT DATE'2021-06-29' FROM dual ) SELECT
  TO_CHAR(cdate + level,'YYYYDDMM')
  FROM
  current_campaign
CONNECT BY
  level < 6;    

20213006
20210107
20210207
20210307
20210407