MySQL - возвращает последнюю строку после использования GROUP BY

-5

Вот журнал активности пользователя в моем проекте, каждый из которых "проголосовал" за разные предметы, предоставляя каждому элементу рейтинг "1", "2" или "3".

rec_id | user_id | item_id  | value
-----------------------------------
1 | 1 | 2 | 3
2 | 1 | 2 | 2
3 | 2 | 1 | 1
4 | 3 | 1 | 1
5 | 3 | 2 | 2
6 | 1 | 2 | 1
7 | 1 | 4 | 2

Я пытаюсь вернуть все item_id user_id "1" проголосовали, и последнее значение, которое они дали каждому элементу. Итак, моя цель - вернуть следующие строки из полной таблицы выше:

rec_id | user_id | item_id  | value
-----------------------------------
6 | 1 | 2 | 1
7 | 1 | 4 | 2

В первом примере user_id "1" трижды проголосовал на item_id "2", поэтому я хочу игнорировать предыдущие экземпляры, в которых пользователь 1 проголосовал за него.

Вот мое выражение до сих пор, но это возвращает "3" для рейтинга item_id 2, когда это должно быть "1":

SELECT MAX(rec_id), user_id, item_id, value 
FROM logs
WHERE user_id=1
GROUP BY user_id, item_id

Что мне нужно добавить для достижения моей цели?

спросил(а) 2021-01-25T16:27:33+03:00 4 месяца, 4 недели назад
1
Решение
63

вам просто нужен подзапрос, где rec_id равен max rec_id

QUERY:
SELECT 
rec_id, user_id, item_id, value
FROM logs
WHERE user_id = 1
AND rec_id IN
( SELECT
MAX(rec_id)
FROM logs
GROUP BY item_id
)
GROUP BY user_id, item_id

DEMO

ВЫВОД:
+-------+---------+----------+-------+
|rec_id | user_id | item_id | value |
+-------+---------+----------+-------+
| 6 | 1 | 2 | 1 |
| 7 | 1 | 4 | 2 |
+-------+---------+----------+-------+

ответил(а) 2021-01-25T16:27:33+03:00 4 месяца, 4 недели назад
63

Вы получаете последнюю строку, обычно используете комбинацию order by и LIMIT 1.


В вашем случае я бы использовал два отдельных запроса. Но я бы сначала переделал свою базу данных, чтобы избежать религии и дубликатов. сильный текст

ответил(а) 2021-01-25T16:27:33+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема