sql - Oracle SQL 中需要 12 个未来数字
问题描述
我在 SQL 中有一个要求,我们有几个市场 id 比如说 20、30、40
在这里,对于使用一个 plsql 函数的每个市场,我们得到一个活动编号,假设市场 20 我得到 20210306,mrkt 30 我们得到 20210307,40 mrkt id 20210308。
现在我想为每个市场实现我们应该有当前的活动编号为 20210306 以及 12 个未来的活动应该基于市场的每个当前活动通过 SQL 查询产生。
我正在使用 union all 和 campaign+1,2,3 等等,这需要时间。我们是否有一些简短的逻辑。
请建议谢谢,维杰
解决方案
LEVEL
您可以使用带有CONNECT BY
子句的伪列生成一系列数据(数字或日期甚至字符) 。在您的情况下,听起来您希望从 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
推荐阅读
- vba - VBA代码与另一列中的最后一个重复日期相加
- autodesk-model-derivative - 步骤文件属性映射
- css - CSS 动画不适用于某些属性
- sql - 为什么 sqldf (r) 中的 sum 函数不正确?
- node.js - 使用 Sequelize 迁移数据库后,列名不同
- python - 使用 python requests 模块检索评论
- html - iPhone 的“添加到收藏夹”需要多大的图标大小?
- javascript - 为 Datepicker 设置本地存储
- xamarin - 使用 xamarin android 覆盖清单文件
- amazon-web-services - aws NLB 导致超时