SQL limit несколько условий [дубликат]

166
11 декабря 2019, 05:40
This question already has an answer here:
Ограничить кол-во записей в группе при группировке в MySQL (1 ответ)
Closed 9 месяцев назад.

коллеги помоги правильно написать запрос столкнулся с проблемой что нужно вывести определенно количество записей с определенным параметром к примеру

id name cat  time
1  aa    0   2019-03-21
2  ad    0   2019-02-21
3  dd    1   2019-03-18
4  dd    2   2019-03-21
5  as    1   2019-01-02

и таких записей может быть много как мне выбрать по 50 последних записей по каждой категории cat ?

лимит не знаю как можно тут использовать нашел решение с UNION но не уверен что ето правильное решение к примеру

SELECT * FROM table where cat=0  ORDER BY time DESC  limit 50
UNION 
SELECT * FROM table where cat=1  ORDER BY time DESC  limit 50

так как с результатирующей таблицы мне еще нужно выполнить определенные операции

Answer 1
SELECT * 
FROM ( SELECT `table`.*,
              IF(@cat=`table`.cat, 
                 @rownum:=@rownum+1, 
                 @rownum:=1+LEAST(0,@cat:=`table`.cat)) rown 
       FROM `table`, 
            (SELECT @rownum:=1, @cat:='_') q1
       ORDER BY cat, time DESC
     ) q2
WHERE rown <= 50
ORDER BY cat, time DESC

Если количество записей в каждой группе значительно (на порядки) больше 50, разумнее реализовать это в формате хранимой процедуры. Курсор по cat, копирование по 50 записей для каждого значения во временную таблицу, и затем select из неё в выходной поток.

READ ALSO
Как перенаправлять запросы с сервера?

Как перенаправлять запросы с сервера?

Как перенаправлять запросы с помощьюhtaccess и сделать исключение

160
Отправка данных формы без перезагрузки

Отправка данных формы без перезагрузки

Друзья, я не силен в PHP и Ajax, по этому прошу помощиИмеется файл простой index

145
Отправка данных из формы в бд

Отправка данных из формы в бд

Уже задавал ранее, но так и не разобрался1

159
Не загружается вид laravel 5.7, ошибка Too few arguments to function e(), 0 passed in

Не загружается вид laravel 5.7, ошибка Too few arguments to function e(), 0 passed in

Я сделал обычный маршрут, чтобы просто возвращал мне вид через контроллер (если сделать функцию для маршрута и туда добавить: return view('manageraddworker');...

138