我有一個包含 id、city_id 和 stock 的表,看起來像這樣。
| ID | city_id | 股票 |
|---|---|---|
| 1 | 1 | 1000 |
| 2 | 2 | 500 |
| 3 | 3 | 11000 |
| 4 | 2 | 600 |
| 5 | 3 | 12000 |
| 6 | 1 | 2000年 |
| 9 | 3 | 13000 |
| 10 | 1 | 3000 |
| 11 | 1 | 4000 |
| 12 | 2 | 700 |
要為每個 city_id 選擇最新的股票值,我使用了以下查詢,效果很好。
SELECT `stock`
FROM `stock_table`
WHERE id in ( SELECT MAX(id)
FROM `stock_table`
GROUP BY city_id
);
它回傳
| 股票 |
|---|
| 13000 |
| 4000 |
| 700 |
現在我想為每個 city_id 選擇第二個最新的股票條目。所以輸出應該如下表所示。
| 股票 |
|---|
| 12000 |
| 3000 |
| 600 |
任何幫助是極大的贊賞。謝謝!
uj5u.com熱心網友回復:
在 MySQL 8 中,您可以使用row_number()視窗函式為id每個磁區排序的每一行分配一個數字city_id。然后只過濾那個存在2(在你的例子中;你可以使用任何數字)。
SELECT x.stock
FROM (SELECT s.stock,
row_number() OVER (PARTITION BY s.city_id
ORDER BY s.id DESC) rn
FROM stock_table s) x
WHERE x.rn = 2;
uj5u.com熱心網友回復:
你可以使用 group by 和 row number 并獲得 rownumber 2 ROW_NUMBER() OVER (PARTITION BY city_id ORDER By id) 作為 ROW
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/385361.html
