SQLServer的top 100 percent用法

需求是:取出符合“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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值