我正在编写一个查询来获取特定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
但是巨大的桌子上的查询非常慢。是否有我可以使用的某个索引或者我可以写的更好的查询?
答案 0 :(得分:2)
我无法得到您的意思,因为在您的内部查询中,您已按其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