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

基于财年规则及当前月减3逻辑生成月度关闭状态的SQL查询需求

实现财年月度关闭标记的SQL查询方案

核心逻辑拆解

  • 财年计算规则:对于任意日期,若月份≥10,则财年为「年份+1」;否则财年为当前年份。例如:
    • 2022-10-01 → 2023财年
    • 2023-09-30 → 2023财年
    • 2023-10-01 → 2024财年
  • 月度关闭标记规则:目标月份是其所属财年的最后3个月(自然月7、8、9月),且当前日期已进入该财年的下一财年时,标记为Y;否则标记为N。

通用SQL查询方案

以下代码兼容多数关系型数据库(如PostgreSQL、MySQL、BigQuery等,仅需根据数据库特性调整日期函数):

SELECT
    date_column,
    -- 计算目标日期的财年
    CASE 
        WHEN EXTRACT(MONTH FROM date_column) >= 10 
        THEN EXTRACT(YEAR FROM date_column) + 1 
        ELSE EXTRACT(YEAR FROM date_column) 
    END AS fiscal_year,
    -- 生成月度关闭标记
    CASE
        -- 满足两个条件:是财年最后3个月,且当前已进入下一财年
        WHEN EXTRACT(MONTH FROM date_column) IN (7, 8, 9)
             AND (CASE 
                     WHEN EXTRACT(MONTH FROM date_column) >= 10 
                     THEN EXTRACT(YEAR FROM date_column) + 1 
                     ELSE EXTRACT(YEAR FROM date_column) 
                  END) + 1 = (CASE 
                                 WHEN EXTRACT(MONTH FROM CURRENT_DATE) >= 10 
                                 THEN EXTRACT(YEAR FROM CURRENT_DATE) + 1 
                                 ELSE EXTRACT(YEAR FROM CURRENT_DATE) 
                              END)
        THEN 'Y'
        ELSE 'N'
    END AS is_closed
FROM your_table;

针对例子的逻辑调整

若你提到的「当前6月时,3月标记为Y其余为N」是正确的预期结果,说明规则可能存在描述偏差。如果需求是标记当前日期减3个月的那个月份,可调整is_closed的判断逻辑:

CASE
    WHEN EXTRACT(YEAR_MONTH FROM date_column) = EXTRACT(YEAR_MONTH FROM CURRENT_DATE - INTERVAL '3 months')
    THEN 'Y'
    ELSE 'N'
END AS is_closed

说明

如果之前用区间对比未得到正确结果,通常是因为财年计算逻辑未正确关联当前日期的财年,或未准确匹配「下一财年」的判断条件。上述方案通过明确拆分财年计算和标记逻辑,可避免此类问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 22:55:55