首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从sql查询中排除重复记录

问如何从sql查询中排除重复记录
EN

Stack Overflow用户
提问于 2016-08-26 00:10:43
回答 4查看 5.2K关注 0票数 3

我正在尝试创建一个基本上从sql表中提取所有数据的报告。问题是,此表用于注册目的,并且在某些情况下,同一员工注册了两个不同的事件,因此表中有多个条目。我真的不需要知道他们注册了哪些活动,只需要知道他们确实注册了。有没有办法修改我的查询,使每个员工只选择一条记录?我尝试使用DISTINCT,但它仍然提取每一条记录。

EN

回答 4

Stack Overflow用户

发布于 2016-08-26 00:20:01

对您所看到的最有可能的解释是,您要返回的记录不是重复的。例如,如果您使用SELECT *,那么您将获得所有列,即使多个记录的雇员姓名、id等列可能相同,但其他列可能是不同的。

如果不了解您的表结构,我无法给出确切的答案。但这里有两种方法来解决这个问题。首先,您可以使用仅与员工对应的列的SELECT DISTINCT,例如

代码语言:javascript
复制
SELECT DISTINCT firstName,
                lastName,
                id
FROM yourTable

这有一个缺点,那就是它丢弃了所有其他列的信息。如果您想保留这些其他列,那么第二个选项是按员工对记录进行分组,然后对其他列使用聚合函数,例如

代码语言:javascript
复制
SELECT firstName,
       lastName,
       id,
       MIN(signupTime)
FROM yourTable
GROUP BY firstName,
         lastName,
         id

在这个查询中,我假设有一个名为signupTime的时间戳列,它记录了每个员工注册的时间(包括可能的重复注册)。此查询将保留第一次注册时间,以及员工id和姓名。

票数 5
EN

Stack Overflow用户

发布于 2016-08-26 00:23:11

为此,请使用ROW_NUMBER()

代码语言:javascript
复制
;WITH CTE AS (

       SELECT *,
              ROW_NUMBER() OVER (PARTITION BY Name ORDER BY ID) RN
       FROM Table
)
SELECT *
FROM CTE
WHERE RN=1     
票数 2
EN

Stack Overflow用户

发布于 2016-08-26 00:19:52

因此,通过阅读问题,我假设您只希望相同的员工姓名显示一次,无论他们是否注册了1个或2个以上的事件。

例如:

代码语言:javascript
复制
$query_employee = mysql_query("SELECT employee_name, events FROM tbl GROUP BY employee_name");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39150069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档