Mysql 用户使用的第一项

Mysql 用户使用的第一项,mysql,group-by,inner-join,Mysql,Group By,Inner Join,我正在编写一个查询,以获取特定用户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

我正在编写一个查询,以获取特定用户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
质疑

它返回正确的值

inner_item_id   first_to_use_it
1               1
3               1
4               1

但是在一个巨大的表上查询速度非常慢。是否有某种索引可以使用,或者有更好的查询可以编写?

我无法准确理解您的意思,因为在您的内部查询中,您已按其
使用的用户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

如果不向表中添加时间戳,就无法知道哪个特定用户是第一个使用项的。似乎您目前正在为此求助于
used\u user\u id
,但虽然这对您给定的输入有效,但它不可能从实际数据中返回您所需的内容。添加了使用的日期以便有意义。我对内部查询进行了排序,因为可能有数百个用户使用一个项目,但是我想确保user\u id是第一个使用它的用户,而不仅仅是id最低的用户。例如,如果在查询中输入used\u user\u id=2,它将返回3个项目,而它应该只返回2的项目\u id。那么,您知道
userid
是第一个使用它的基础是什么?你有约会吗?我想他用的是顺序insertion@Giuseppe如果这是他的基础,那就错了。基本上,服务器将记录插入任意一行。但如果OP具有主键(自动递增值)或插入日期,则可以执行此操作:D
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