oracle/dm查詢分組中最大的一條數據:ROW_NUMBER()
你可以使用 Oracle 數據庫中的 ROW_NUMBER() 窗口函數來實現這個需求。該函數能夠在每個分組內對行進行編號,然后我們可以選擇每個分組中 number 最大的那一行。
以下是一個示例 SQL 查詢,演示如何根據 id 分組,并獲取 number 最大的對象:
SELECT id, number, name
FROM (
SELECT
id,
number,
name,
ROW_NUMBER() OVER (PARTITION BY id ORDER BY number DESC) AS rn
FROM your_table
)
WHERE rn = 1;
在這個查詢中:
- 內部查詢 (
FROM your_table) 使用ROW_NUMBER()窗口函數對每個id分組內的數據進行編號,并且按照number降序排列。 ROW_NUMBER() OVER (PARTITION BY id ORDER BY number DESC)這部分代碼會在每個id分組內,根據number降序為每行分配一個唯一的行號。- 外部查詢通過
WHERE rn = 1篩選出每個分組中number最大的那一行,因為在按number降序排列后,行號為 1 的就是number最大的那一行。
請將 your_table 替換為你的實際表名。
示例數據:
| id | number | name |
|---|---|---|
| 1 | 1 | 第1個人 |
| 1 | 2 | 第2個人 |
| 2 | 1 | 第3個人 |
| 2 | 2 | 第4個人 |
| 3 | 1 | 第5個人 |
| 3 | 2 | 第6個人 |
| 3 | 3 | 第7個人 |
查詢結果:
| id | number | name |
|---|---|---|
| 1 | 2 | 第2個人 |
| 2 | 2 | 第4個人 |
| 3 | 3 | 第7個人 |
這段 SQL 查詢能正確地返回每個 id 分組中 number 最大的那一行數據。
浙公網安備 33010602011771號