[英]MySQL - Return last row after using GROUP BY
这是我项目上用户活动的日志,这些用户对各个项目都进行了“投票”,并给每个项目定了“ 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已对其进行投票的先前实例。
到目前为止,这是我的声明,但是对于item_id 2的评分,它应返回“ 3”,但应为“ 1”:
SELECT MAX(rec_id), user_id, item_id, value
FROM logs
WHERE user_id=1
GROUP BY user_id, item_id
我需要添加什么才能达到目标?
通常会得到最后一行,您将使用order by
和LIMIT 1
的组合。
在您的情况下,我将使用两个单独的查询。 但是我首先会重组我的数据库以避免宗教和重复。 强文本
基本上,您只需要一个rec_id等于最大rec_id的子查询
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
+-------+---------+----------+-------+
|rec_id | user_id | item_id | value |
+-------+---------+----------+-------+
| 6 | 1 | 2 | 1 |
| 7 | 1 | 4 | 2 |
+-------+---------+----------+-------+
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.