SQL中如何筛选指定status的最大日期对应id并赋值给变量
正确实现方案
方案1:子查询匹配最大日期
SELECT @MaxID = id FROM @DateValues WHERE STATUS = 'ABC' AND dates = ( SELECT MAX(dates) FROM @DateValues WHERE STATUS='ABC' );
方案2:TOP+排序(更简洁,适配多匹配行场景)
如果同一天存在多条status为ABC的记录,想要明确取id最大的那行可以用这个写法:
SELECT TOP 1 @MaxID = id FROM @DateValues WHERE STATUS = 'ABC' ORDER BY dates DESC, id DESC;
原有代码问题说明
- 第一段分组查询:你按
id和STATUS分组,每条符合条件的记录都是独立分组,所以会返回所有status为ABC的行,自然出现多个结果集。 - 第二段嵌套查询:外层查询没有加
STATUS='ABC'的过滤条件,如果最大日期对应的行存在status不为ABC的记录也会被返回,且同日期下有多个匹配值时也会返回多个结果。
内容的提问来源于stack exchange,提问作者A_developer
相关产品推荐
相关产品推荐

