SQLServer的top 100 percent用法
需求是:取出符合“where“条件中的第一条数据,存在顺序问题,首先是想到了top 100 percent 这个表示符合where 条件的数据100% 取出,区别于top 100 ,后者表示 取出符合where条件的100条数据,两者概念存在巨大差异,需谨慎区分。第一个sql 写出为:SELECT TOP1 ttm.kadai_nendoFROM( SELECT TOP 100 PERCENT k
需求是:取出符合“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
完全满足需求,记录一次,不喜勿喷,个人观点。
更多推荐
所有评论(0)