需求是:取出符合“where“条件中的第一条数据,存在顺序问题,

首先是想到了top 100 percent 这个表示符合where 条件的数据100% 取出,区别于 top 100 ,后者表示 取出符合where条件的100条数据,两者概念存在巨大差异,需谨慎区分。

第一个sql 写出为:

SELECT TOP
    1 ttm.kadai_nendo 
FROM
    ( SELECT TOP 100 PERCENT kadai_nendo, toutatsudo_code FROM toutatsudo_master WHERE delete_flag = '0' ORDER BY kadai_nendo DESC, toutatsudo_code ASC ) ttm

查出数据与想象不同,原因是 TOP (100) PERCENT 在 SQL Server 的最新版本中完全没有意义,它(连同相应的 ORDER BY,在视图定义或派生表的情况下)被查询处理器忽略,

所以继续优化

本着去掉TOP 100 PERCENT 的想法,重新实现,

首先是查出所有数据

SELECT kadai_nendo, toutatsudo_code FROM toutatsudo_master WHERE delete_flag = '0'

然后在 order by  top 1

最终实现为:

SELECT TOP
    1 ttm.kadai_nendo 
FROM
    ( SELECT kadai_nendo, toutatsudo_code FROM toutatsudo_master WHERE delete_flag = '0' ) ttm 
ORDER BY
    ttm.kadai_nendo DESC,
    ttm.toutatsudo_code ASC

完全满足需求,记录一次,不喜勿喷,个人观点。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐