![](/img/trans.png)
[英]Getting all row data from minimum value in a field in a SQL query (Oracle)
[英]SQL query : How to retrieve minimum value from top to that row in Oracle
我需要帮助在 Oracle 中编写查询以获取每行的最小值,将当前行数量与之前的最小值进行比较。
换句话说,计算从顶部到该行的每一行的最小值,最小值函数的数据集是从第一行到当前行。
例如:检索每行的 Min(previous, current) 值,如下所示
秩 | 数量 | Calc Min(以前,当前) |
---|---|---|
1 | 600 | 600 |
2 | 800 | 600 |
3 | 300 | 300 |
4 | 500 | 300 |
5 | 500 | 300 |
6 | 800 | 300 |
7 | 200 | 200 |
8 | 550 | 200 |
在此先感谢灰
您正在寻找分析函数MIN OVER
。
select
rank,
amount,
min(amount) over (order by rank) as min_amount_so_far
from mytable
order by rank;
您也可以使用MATCH_RECOGNIZE
解决此问题:
SELECT rank, amount, min_amount
FROM table_name
MATCH_RECOGNIZE(
ORDER BY Rank
MEASURES
MIN(Amount) AS min_amount
ALL ROWS PER MATCH
PATTERN (^ any_row+ )
DEFINE any_row AS 1 = 1
)
其中,对于样本数据:
CREATE TABLE table_name (Rank, Amount) AS
SELECT 1, 600 FROM DUAL UNION ALL
SELECT 2, 800 FROM DUAL UNION ALL
SELECT 3, 300 FROM DUAL UNION ALL
SELECT 4, 500 FROM DUAL UNION ALL
SELECT 5, 500 FROM DUAL UNION ALL
SELECT 6, 800 FROM DUAL UNION ALL
SELECT 7, 200 FROM DUAL UNION ALL
SELECT 8, 550 FROM DUAL;
输出:
秩 数量 MIN_AMOUNT 1 600 600 2 800 600 3 300 300 4 500 300 5 500 300 6 800 300 7 200 200 8 550 200
db<> 在这里摆弄
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.