Mysql 用户使用的第一项
我正在编写一个查询,以获取特定用户id最先使用的项目。下面是一些示例数据-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
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