bigton
@bigton
Web-программист

SELECT, IN, LIMIT. Как составить запрос?

Добрый день.

Таблица в БД
field_afield_b
11
12
13
14
21
22
23
24
31
32
33
34


Запрос
SELECT * FROM `table` WHERE `field_a` IN (1, 2) ORDER BY `field_b` DESC
вернет все строки, в которых `field_a` равно 1 или 2, отсортированные по полю `field_b`.

Вопрос. Как составить запрос, чтобы для каждого значения `field_a` было выбрано по 2 строки отсортированных по `field_b`? То есть, чтобы результат был такой

field_afield_b
14
13
24
23
  • Вопрос задан
  • 2215 просмотров
Пригласить эксперта
Ответы на вопрос 2
disc
@disc
веб-разработчик
ORDER BY `field_a` ASC, `field_b` DESC
Ответ написан
mgyk
@mgyk
Такой вариант корректный, но достаточно медленный
SET @rank=0; 
SET @current_field=0; 
select a.field_a, a.field_b, 
@rank:=if(@current_field = a.field_a,@rank+1,0) as rank, 
@current_field:=a.field_a as current 
FROM  (select field_a, field_b from test2 where field_a IN (1,2)  
ORDER BY  field_a, field_b DESC ) as a having rank < 3;

Посмотрите, возможно проще будет через GROUP_CONCAT(field_b ORDER BY field_b DESC) GROUP BY field_a и отфильтровать первые N на стороне клиента.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы