我正在尝试创建一个基本上从sql表中提取所有数据的报告。问题是,此表用于注册目的,并且在某些情况下,同一员工注册了两个不同的事件,因此表中有多个条目。我真的不需要知道他们注册了哪些活动,只需要知道他们确实注册了。有没有办法修改我的查询,使每个员工只选择一条记录?我尝试使用DISTINCT,但它仍然提取每一条记录。
发布于 2016-08-26 00:20:01
对您所看到的最有可能的解释是,您要返回的记录不是重复的。例如,如果您使用SELECT *,那么您将获得所有列,即使多个记录的雇员姓名、id等列可能相同,但其他列可能是不同的。
如果不了解您的表结构,我无法给出确切的答案。但这里有两种方法来解决这个问题。首先,您可以使用仅与员工对应的列的SELECT DISTINCT,例如
SELECT DISTINCT firstName,
lastName,
id
FROM yourTable这有一个缺点,那就是它丢弃了所有其他列的信息。如果您想保留这些其他列,那么第二个选项是按员工对记录进行分组,然后对其他列使用聚合函数,例如
SELECT firstName,
lastName,
id,
MIN(signupTime)
FROM yourTable
GROUP BY firstName,
lastName,
id在这个查询中,我假设有一个名为signupTime的时间戳列,它记录了每个员工注册的时间(包括可能的重复注册)。此查询将保留第一次注册时间,以及员工id和姓名。
发布于 2016-08-26 00:23:11
为此,请使用ROW_NUMBER()
;WITH CTE AS (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY Name ORDER BY ID) RN
FROM Table
)
SELECT *
FROM CTE
WHERE RN=1 发布于 2016-08-26 00:19:52
因此,通过阅读问题,我假设您只希望相同的员工姓名显示一次,无论他们是否注册了1个或2个以上的事件。
例如:
$query_employee = mysql_query("SELECT employee_name, events FROM tbl GROUP BY employee_name");https://stackoverflow.com/questions/39150069
复制相似问题