我有包含这些数据的表:
Id City Amount
1 London 25000
2 New York 20000
3 London 23000
4 Paris 22000
5 Moscow 18000
6 London 21000
7 New York 19000
8 Moscow 26000
9 London 24000
10 Moscow 16000
11 London 15000
12 Moscow 23000
13 Paris 19000
14 New York 15000
15 London 26000
我必须创建SQL来获得这样的结果?
Id City Amount
1 London 25000
2 New York 20000
3 London 23000
4 Paris 22000
5 Moscow 18000
7 New York 19000
8 Moscow 26000
13 Paris 19000
那意味着我只想让一个城市的最大值只出现2次。
我只想获取前两个记录或后两个记录
谢谢!
答案 0 :(得分:-2)
如果您的 MySQL版本<8.0 ,则可以使用Session variables模拟RowNumber
功能。为了实现基于分组的Partition By
功能,我们将使用两个会话变量,一个用于行号,另一个用于存储旧的City
以将其与当前变量进行比较,并将其递增1,如果属于同一City
组,则重置为1。
以下代码将获取您的前两个记录。您可以通过将查询中的2更改为n来轻松更改它以获取前n条记录。
SET @row_number = 0;
SET @city_var = '';
SELECT inner_nest.Id,
inner_nest.City,
inner_nest.Amount
FROM (
SELECT
@row_number:=CASE
WHEN @city_var = City THEN @row_number + 1
ELSE 1
END AS num,
Id,
@city_var:=City as City,
Amount
FROM
table_name
ORDER BY
City) AS inner_nest
WHERE inner_nest.num <= 2
ORDER BY inner_nest.Id ASC
**
**