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
相关产品推荐
相关产品推荐

