mysql - 用户使用的第一个项目

标签 mysql group-by inner-join

我正在编写一个查询来获取特定 user_id 最先使用的项目。这是一些示例数据 -

item_id used_user_id    date_used
1       1               2012-08-25
1       2               2012-08-26               
1       3               2012-08-27
2       2               2012-08-27
3       1               2012-08-27
4       1               2012-08-21
4       3               2012-08-24
5       3               2012-08-23

查询

select item_id as inner_item_id, ( select used_user_id 
                                   from test 
                                   where test.item_id = inner_item_id 
                                   order by date_used asc 
                                   limit 1 ) as first_to_use_it 
from test 
where used_user_id = 1 
group by item_id

它返回正确的值

inner_item_id   first_to_use_it
1               1
3               1
4               1

但是在一个巨大的表上查询非常慢。是否有我可以使用的特定索引或可以编写更好的查询?

最佳答案

我无法准确理解您的意思,因为在您的内部查询中,您已按其 used_user_id 对它进行排序,并且在您的外部查询中,您也按其用户 ID 对其进行了过滤。为什么不直接这样做呢?

SELECT DISTINCT item_id AS inner_item_id,
       used_user_id AS first_to_use_it 
FROM   test
WHERE  used_user_id = 1 

更新1

SELECT  b.item_id, 
        b.used_user_id AS first_to_use_it
FROM
    (
        SELECT item_ID, MIN(date_used) minDate
        FROM tableName
        GROUP BY item_ID
    ) a
        INNER JOIN tableName b
            ON a.item_ID = b.item_ID AND
                a.minDate = b.date_used
WHERE   b.used_user_id = 1

关于mysql - 用户使用的第一个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12142198/

相关文章:

MYSQL 从表中获取重复值

php - 将 SQL 语句转换为发送 Db_Table_Abstract_Select 代码

mysql - 在 SQL 中从联接表填充数据

mysql - 无法加载Mysql LOAD DATA LOCAL INFILE

mysql - 检索每组中的最后一条记录 - MySQL

sql - 如何在 SWIFT 的 IOS CORE-DATA 请求中使用 SQL GROUP BY 和 SUM 函数?

MySQL从一个表中减去第二个表中的某些行的值

mysql字符集转换

python mysql中将订单号输入到表id中

python - 如果某些列的单元格值符合特定条件,如何分组并求和