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

如何在SQL查询中按ID匹配对应财年过滤数据优化刷新速度

需求说明

我的原始SQL查询片段如下:

FROM myTable
INNER JOIN distinctTable DT on DT.[ID] = myTable.[ID]
WHERE myTable.[Category] = '1520'

当前查询会返回myTable.[FiscalYear]的所有值,我需要在现有WHERE子句基础上,针对distinctTable DT中每一条关联记录,过滤出其对应的财年数据。

数据示例

distinctTable数据(最后一列仅为说明,不在表中)

IDClose Date对应财年(6月至次年5月)
A1012022-04-21FY22
A1012024-12-10FY25

注:同一ID对应不同Close Date并非输入错误。

原始查询返回结果(单个成本代码)

IDFiscal YearCost CodeAmount
A101FY20CostCode 110
A101FY21CostCode 120
A101FY22CostCode 130
A101FY23CostCode 140
A101FY24CostCode 150
A101FY20CostCode 1100
A101FY21CostCode 1200
A101FY22CostCode 1300
A101FY23CostCode 1400
A101FY24CostCode 1500

预期结果

IDFiscal YearCost CodeAmount
A101FY22CostCode 130
A101FY24CostCode 1500

注:财年周期为6月至次年5月,即2024年6月至2025年5月为FY25。

解决方案

核心思路是根据DT.[Close Date]计算出对应的财年,再与myTable.[FiscalYear]匹配。以下是修改后的查询片段:

FROM myTable
INNER JOIN distinctTable DT on DT.[ID] = myTable.[ID]
WHERE myTable.[Category] = '1520'
AND myTable.[FiscalYear] = 'FY' + 
    CASE 
        WHEN MONTH(DT.[Close Date]) >= 6 THEN CAST(YEAR(DT.[Close Date]) + 1 AS VARCHAR(4))
        ELSE CAST(YEAR(DT.[Close Date]) AS VARCHAR(4))
    END

逻辑解释

  1. 财年计算规则:根据Close Date的月份判断:
    • 若月份≥6,财年为年份+1,格式化为FY+年份
    • 若月份<6,财年为当前年份,格式化为FY+年份
  2. 匹配过滤:将计算得到的财年与myTable中的FiscalYear字段进行匹配,只保留对应财年的记录。

内容的提问来源于stack exchange,提问作者David.L

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 15:12:39