如何为动态小时表添加多机型列并生成对应组合数据?
实现方案
完全可以实现这个需求,只需将机型列表与原有小时时间查询做笛卡尔积关联,再拼接出符合格式的machine字段即可。
最终查询语句
WITH hour_list AS ( SELECT TO_CHAR( TRUNC(SYSDATE) + INTERVAL '1' HOUR * (LEVEL - 1), 'YYYY-MM-DD HH24' ) AS date_hour FROM DUAL CONNECT BY TRUNC(SYSDATE) + INTERVAL '1' HOUR * (LEVEL - 1) < TRUNC(SYSDATE) + INTERVAL '1' DAY ), machine_list AS ( SELECT 'MAQ1' AS machine_code FROM DUAL UNION ALL SELECT 'MAQ2' AS machine_code FROM DUAL UNION ALL SELECT 'MAQ3' AS machine_code FROM DUAL ) SELECT h.date_hour, m.machine_code || '_' || h.date_hour AS machine FROM hour_list h CROSS JOIN machine_list m ORDER BY m.machine_code, h.date_hour;
逻辑说明
hour_listCTE:保留你原有的逻辑,生成当日00到23点的所有整点时段。machine_listCTE:通过UNION ALL生成需要的三个机型代码。- 交叉连接(CROSS JOIN):让每个机型与每个小时时段一一配对,生成3×24=72行数据。
- 字段拼接:用
||运算符将机型代码与date_hour拼接成你需要的machine列格式。
部分预期结果示例
| date_hour | machine |
|---|---|
| 2023-08-09 00 | MAQ1_2023-08-09 00 |
| 2023-08-09 01 | MAQ1_2023-08-09 01 |
| ... | ... |
| 2023-08-09 23 | MAQ1_2023-08-09 23 |
| 2023-08-09 00 | MAQ2_2023-08-09 00 |
| ... | ... |
内容的提问来源于stack exchange,提问作者req7
相关产品推荐
相关产品推荐

