Mysql 根据一列从重复项中获取第一行
我使用的是MariaDB版本10.2.21 有多行具有重复的用户id(列之一) 我希望获得每个用户标识的第一个匹配项,但不仅仅是用户标识,而是与第一个用户标识相关联的所有行Mysql 根据一列从重复项中获取第一行,mysql,sql,mariadb,Mysql,Sql,Mariadb,我使用的是MariaDB版本10.2.21 有多行具有重复的用户id(列之一) 我希望获得每个用户标识的第一个匹配项,但不仅仅是用户标识,而是与第一个用户标识相关联的所有行 select distinct user_id, from user_table where user_id in (a,b,c,d,e,f,....) and date = '2020-02-25'; 现在,当我尝试添加相关列时,这正确地为我提供了所有不同的属性 EXPLAIN select
select
distinct user_id,
from
user_table
where
user_id in (a,b,c,d,e,f,....) and
date = '2020-02-25';
现在,当我尝试添加相关列时,这正确地为我提供了所有不同的属性
EXPLAIN
select
distinct user_id,
ST_X(location) as lng
from
user_table
where
user_id in (a,b,c,d,e,f,....) and
date = '2020-02-25';
它告诉我,我将获得200多万行。。。我只有3000个唯一的用户id
我只想获取第一个出现的用户id及其关联位置
由于我的数据库非常大,我需要充分利用索引,否则它会崩溃
我的索引是[user\u id,date],其中user\u id是第一个索引,date是第二个索引
所以我的问题是如何通过使用索引来获取唯一的(第一次出现=最上面一行)用户信息,这样我的数据库就不会中断
所以如果有
user_id location
1 (123.22, 22.33)
1 (111.22, 22.12)
2 (155.33, 41.23)
2 (160.41, 12.31)
我会得到
user_id location
1 (123.22, 22.33)
2 (155.33, 41.23)
如果只有一个位置,请使用聚合:
select user_id, ST_X(min(location)) as lng
from user_table
where user_id in (a,b,c,d,e,f,....) and
date = '2020-02-25'
group by user_id;
如果只有一个位置,请使用聚合:
select user_id, ST_X(min(location)) as lng
from user_table
where user_id in (a,b,c,d,e,f,....) and
date = '2020-02-25'
group by user_id;
谢谢,min(位置)是做什么的??当我运行它时,它仍然会返回相同数量的行,2649544@Ambleu . . . 这将为每个用户返回一行。根据你的问题,这不是200多万行。你的意思是,即使我在EXPLAIN语句中运行它并说rows=2+mil,但当我实际运行代码时,它将返回每个用户的行数?@Ambleu。它需要处理所有行,但每个用户只返回一行。
ST_X()
函数在groupby
@Ambleu之后运行。SQL表表示无序集。除非列指定了排序,否则没有“第一”行。谢谢,最小(位置)是什么??当我运行它时,它仍然会返回相同数量的行,2649544@Ambleu . . . 这将为每个用户返回一行。根据你的问题,这不是200多万行。你的意思是,即使我在EXPLAIN语句中运行它并说rows=2+mil,但当我实际运行代码时,它将返回每个用户的行数?@Ambleu。它需要处理所有行,但每个用户只返回一行。ST_X()
函数在groupby
@Ambleu之后运行。SQL表表示无序集。除非列指定了顺序,否则没有“第一”行。