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

SQL Server中无法筛选仅含最大STJH_DATE_ACTION值行的问题求助

解决方案

你的问题出在窗口函数的分区逻辑和筛选条件上,要实现每个STJ_JOUR保留STJH_DATE_ACTION最大的行,可以按下面的方式修改SQL:

修正后的查询语句

WITH TABLE AS (
    SELECT 
        STJH.[META_CODE_ORIGINE] AS Salle_TMD_JOUR_HISTORIQUE_ID,
        STJH.[STJH_DATE_ACTION],
        STJH.[STJH_TYPE_ACTION],
        STH.ST_ID,
        STJH.[STJ_JOUR],
        STJH.[STJ_HEURE_DEBUT],
        STJH.[STJ_HEURE_FIN],
        STH.[META_CODE_ORIGINE] AS SALLE_TMD_HISTORIQUE_ID,
        STH.[ST_DATE_DEBUT],
        STH.[ST_DATE_FIN],
        STH.[STH_DATE_ACTION],
        -- 按STJ_JOUR分区,计算每个星期几对应的最大STJH_DATE_ACTION
        MAX(STJH.STJH_DATE_ACTION) OVER (PARTITION BY STJH.STJ_JOUR) AS max_stjh_date_action
    FROM [BI_EASILY].[bloc].[D_TMD_JOUR_HISTORIQUE] STJH
    LEFT JOIN [BI_EASILY].[bloc].[D_TMD_HISTORIQUE] STH 
        ON STJH.[ST_ID] = STH.[ST_ID]
    WHERE 
        STJH.[STJH_TYPE_ACTION] <> 3 
        AND STJH.ST_ID = 37
        -- 移除STJ_JOUR=1的筛选,让所有星期几的数据都参与计算
) 
SELECT * 
FROM TABLE 
-- 筛选出当前行的STJH_DATE_ACTION等于该STJ_JOUR组内的最大值
WHERE STJH_DATE_ACTION = max_stjh_date_action

关键改动说明

  • 窗口函数分区调整:把PARTITION BY STH.[META_CODE_ORIGINE]改成PARTITION BY STJH.STJ_JOUR,这样就能针对每个星期几(STJ_JOUR)计算对应的最大操作日期。
  • 筛选条件修正:用STJH_DATE_ACTION = max_stjh_date_action替代原来的max_date_action <= stjh_date_action,精准匹配每组的最大日期行。
  • 冗余条件清理:去掉了重复的STJH.ST_ID = 37条件,简化查询。

如果你的需求是每个ST_ID + STJ_JOUR的组合保留最大日期行,只需要把窗口函数的分区字段改成PARTITION BY STJH.ST_ID, STJH.STJ_JOUR即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 20:20:18