我有很多存储过程遵循选择日期列是最新到某个日期的行的模式,包括在内。我看到有两种形式在使用:
select top 1 x, y, z from sometable where a=b and date <= @date order by date desc
或者
select x, y, z from sometable where a=b and date=(select max(date) from sometable where a=b and date <= @date)
我可以想象第二种形式的派生,它也使用连接而不是子查询。
我们可以忽略第二种形式可能返回多行的情况。假设它永远不会。
由于这在很多地方使用,其中一些针对性能关键代码中的大量行,我想标准化哪个是更优化的解决方案(这可能是其他一些建议)。
一些谷歌搜索已经找到了 TOP 1 与 MAX 的大量比较,但通常是针对单个值,没有子查询。在这种情况下,MAX 是明显的赢家,但我不确定子查询是否会改变这一点。
我很欣赏在这方面比我更博学的人的观点(应该是你们中的大多数人!)。