You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle SQL实现周日期转日日期并避免数据重复

Oracle SQL:将周日期转换为每日日期并避免重复数据

方法1:递归CTE生成日期偏移

通过递归CTE生成0到6的日期偏移量,与原表交叉连接得到一周内的所有日期,并用DISTINCT过滤重复数据:

WITH day_offsets AS (
    SELECT 0 AS offset FROM DUAL
    UNION ALL
    SELECT offset + 1 FROM day_offsets WHERE offset < 6
)
SELECT 
    DISTINCT
    t.ID,
    t.Item,
    t.Weekdate + do.offset AS Days,
    t.TotalQty
FROM 
    your_table t
CROSS JOIN 
    day_offsets do;

方法2:CONNECT BY层级查询

利用Oracle层级查询生成一周7天,通过PRIOR SYS_GUID()防止循环,同时用DISTINCT确保无重复:

SELECT 
    DISTINCT
    t.ID,
    t.Item,
    t.Weekdate + LEVEL - 1 AS Days,
    t.TotalQty
FROM 
    your_table t
CONNECT BY 
    LEVEL <= 7
    AND PRIOR ID = ID
    AND PRIOR Item = Item
    AND PRIOR Weekdate = Weekdate
    AND PRIOR SYS_GUID() IS NOT NULL;

关键说明

  1. 日期偏移调整:假设Weekdate是一周起始日(如周一),若Weekdate为周末(如周日),可修改偏移逻辑为Weekdate - 6 + do.offset覆盖整周。
  2. 去重优化:如果原表本身无重复的ID/Item/Weekdate记录,可去掉DISTINCT提升查询性能。
  3. 纯SQL实现:两种方案均无需PL/SQL,完全通过SQL语句完成需求。

内容的提问来源于stack exchange,提问作者Marius

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 06:28:34