
Используя вышеупомянутую структуру данных, я хочу получить записи обратно на основе группировки model_id, насколько важна запись и какова последняя запись.Поэтому для этих данных я хочу получить записи 2, 4, 6, 7 и 10.
- Я хочу получить запись 2, потому что для model_id 1 записи 1 и 2 одинаковыважность, но 2 более свежая.
- Я хочу получить обратно запись 4, потому что для model_id 2 запись 4 имеет более важное значение, чем запись 3.
- Я хочу получить запись 6, потому что для model_id 3, записи 5 и 6имеют ту же важность, но более поздняя версия 6.
- Я хочу получить запись 7, потому что это единственная запись для model_id 4, независимо от ее уровня важности.
- Я хочуполучить запись 10, потому что она имеет более высокую важность и является самой последней из записей с более высокой важностью для model_id 5.
Поле оценки не очень важно для запроса, оно простозначение, которое я хочу использовать, когда вернусь набор результатов, который я хочу.
Для этого я использую MySQL 5.6.
Кто-нибудь знает, как это атаковать?
Редактировать: Добавление ссылки на db-fiddle: https://www.db-fiddle.com/f/9ZEcpn7vfBebAxnEBtfAwe/0
Это набор результатов, который я хочу вернуть:
2, lower, 4.6, 1, 2018-10-02 12:00:00
4, higher, 6.3, 2, 2018-08-13 12:00:00
6, higher, 4.1, 3, 2018-08-23 12:00:00
7, higher, 7.1, 4, 2018-08-11 12:00:00
10, higher, 4.7, 5, 2018-09-14 12:00:00
Это мой SQL-код, который был близок, благодаряподсказка об использовании DENSE_RANK ().Это дает мне правильный результат в моем локальном MySql Workbench, но не совсем правильно на db-fiddle.
set @pk1 ='';
set @rn1 =1;
set @sal ='';
set @val =1;
SELECT id,model_id,
importance,
denseRank
FROM
(
SELECT id,model_id,
importance,
@rn1 := if(@pk1=model_id, if(@sal=importance, @rn1, @rn1+@val),1) as denseRank,
@val := if(@pk1=model_id, if(@sal=importance, @val+1, 1),1) as value,
@pk1 := model_id,
@sal := importance
FROM
(
SELECT id,model_id,
importance
FROM temp
ORDER BY model_id,importance,created_at desc
) A
) B where denseRank = '1' group by model_id;