繁体   English   中英

MySQL-使用GROUP BY后返回最后一行

[英]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 byLIMIT 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM