FIRST/LAST取出的值为啥是一样的?

我在求仓库别数量的最大值与最小值时,
用下记语句,我发现有FIRST与用LAST求出的值是一样的,
因刚学分析函数,对这个逻辑不是太了解,请教:

select location_no,
       max(qty_onhand) keep (dense_rank first order by location_no) maxv,
       min(qty_onhand) keep (dense_rank last order by location_no) minv
from inventory_part_in_stock_loc  
group by location_no  

上述语句中,将FIRST改为LAST或将LAST改为FIRST,
结果都是一样的,WHY33.gif

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12391917/viewspace-247732/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/12391917/viewspace-247732/

### 关于FIRST/LAST能同时使用的规则或原因 在编程和据处理中,`FIRST` 和 `LAST` 的概念通常用于指代集合中的第一个元素和最后一个元素。当涉及到某些特定的操作时,这两个操作符能同时应用于同一个上下文中,主要原因在于它们代表的是互斥的状态。 #### 逻辑冲突 如果试图在同一查询或指令中指定既返回第一个也返回最后一个记录,则会产生逻辑上的矛盾。例如,在据库查询语句中,假设有一个包含多个项目的结果集,要求获该列表的第一个 (`FIRST`) 和最后一个 (`LAST`) 记录意味着要获得两个同的位置的信息。然而,SQL标准并支持这种双重定位的方式[^1]。 #### 性能考虑 从性能角度来看,为了找到第一条记录,系统只需要读到满足条件的第一条即可停止;而寻找最后一条则可能需要遍历整个表直到结尾处才能确定具体哪一个是真正的最后一项。因此,尝试一次性完成这两者会增加必要的复杂性和资源消耗[^2]。 #### 实际应用案例 在一个典型的基因组据分析工作流里,FASTQ文件格式用来存储测序产生的原始序列及其质量评分。对于这类大规模的据集来说,高效地访问首尾两端的据点是非常重要的。但是由于上述提到的原因,在实际编写脚本或者设计算法的时候会去实现能够同时提`FIRST`和`LAST`的功能。 ```sql -- 错误示范:试图一次firstlast SELECT * FROM table_name WHERE condition ORDER BY some_column FETCH FIRST AND LAST ROW ONLY; ``` 实际上应该分开两次执行: ```sql -- 正确做法之一:分别取出firstlast WITH ranked_data AS ( SELECT *, ROW_NUMBER() OVER (ORDER BY id ASC) as rn_asc, ROW_NUMBER() OVER (ORDER BY id DESC) as rn_desc FROM your_table ) SELECT * FROM ranked_data WHERE rn_asc = 1 OR rn_desc = 1; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值