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
我在 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