Выберите предельный результат в MySQL - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть таблица с этими данными:

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 голосов
/ 07 сентября 2018

Если ваша версия MySQL <8.0 </strong>, вы можете имитировать функциональность RowNumber, используя переменные сеанса . Для достижения функциональности Partition By, основанной на группировке, мы будем использовать две переменные сеанса, одну для номера строки, а другую для хранения старого City, чтобы сравнить его с текущим, и увеличить его на 1, если он принадлежит одному City группа, иначе сброс на 1.

Следующий код получит ваши первые две записи . Вы можете легко изменить его, чтобы получить первые n записей, изменив 2 на 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

**

...