繁体   English   中英

SQL查询:如何在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM