在mysql中选择限制结果

时间:2018-09-07 07:41:36

标签: mysql select limit

我有包含这些数据的表:

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次。

我只想获取前两个记录或后两个记录

谢谢!

1 个答案:

答案 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 

**

SQL Fiddle

**