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

如何在SQL中提取FY2018-2019、FY2022-2023财年数据并去重?

财年数据提取:修正SQL条件与解决重复问题

先修正你的SQL日期范围错误

你当前的SQL条件完全写反了日期范围,导致逻辑错误。以财年(通常为当年7月至次年6月)为例,FY2018-2019的正确时间范围是2018年7月1日到2019年6月30日,对应的SQL条件应该是:

WHERE (TRUNC(rep_date) >= '01-JUL-2018' AND TRUNC(rep_date) <= '30-JUN-2019') -- FY2018-2019
   OR (TRUNC(rep_date) >= '01-JUL-2022' AND TRUNC(rep_date) <= '30-JUN-2023') -- FY2022-2023

原条件中的<= '01-jul-2018' AND >= '30-jun-2019'是一个不可能成立的空范围,根本不会返回FY2018-2019的数据;FY2022-2023的条件同理写反,这大概率是你遇到异常重复的核心原因。

处理数据重复的替代方案

修正日期范围后如果仍有重复,无需强制分文件提取,可根据重复类型选择以下方法:

  • 整行重复:用DISTINCT去重
    如果重复是整行数据完全一致,直接在SELECT后添加DISTINCT关键字即可:

    SELECT DISTINCT col1, col2, ... -- 建议指定具体字段而非*,提升性能
    FROM your_table
    WHERE (TRUNC(rep_date) >= '01-JUL-2018' AND TRUNC(rep_date) <= '30-JUN-2019')
       OR (TRUNC(rep_date) >= '01-JUL-2022' AND TRUNC(rep_date) <= '30-JUN-2023')
    
  • 关联查询导致重复:调整JOIN或用聚合函数
    如果重复是因为多表关联时的一对多关系(比如一条主数据对应多条明细),可以优化JOIN条件,或者用GROUP BY配合MAX()/MIN()等聚合函数获取唯一记录。

  • 分查询无重复:用UNION ALL合并
    如果你分两次单独查询各财年数据时没有重复,可以用UNION ALL合并结果,既保证一次提取,又避免OR可能带来的执行计划问题:

    SELECT col1, col2, ... FROM your_table
    WHERE TRUNC(rep_date) >= '01-JUL-2018' AND TRUNC(rep_date) <= '30-JUN-2019'
    UNION ALL
    SELECT col1, col2, ... FROM your_table
    WHERE TRUNC(rep_date) >= '01-JUL-2022' AND TRUNC(rep_date) <= '30-JUN-2023'
    

    若分查询本身有重复,可换成UNION(自动去重,但性能略低于UNION ALL)。

总结

优先修正SQL的日期范围错误,再根据重复的具体原因选择去重或查询优化方案,完全不需要分文件提取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 00:15:18