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

时间:2016-08-25 16:10:43

标签: sql-server-2008

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

4 个答案:

答案 0 :(得分:2)

您所看到的最有可能的解释是您回来的记录不是重复记录。例如,如果您使用output { kafka { codec => plain { format => "%{message}" } topic_id => "data_raw" } } ,那么您将返回所有列,即使多个记录的员工姓名,ID等列可能相同,其他列也可能不同。

在不知道你的桌面结构的情况下,我无法给出确切的答案。但是有两种方法可以解决这个问题。首先,您可以使用$query_employee = mysql_query("SELECT employee_name, events FROM tbl GROUP BY employee_name"); 仅包含与员工相对应的列,例如

SELECT *

这样做的缺点是它会丢弃所有其他列的信息。如果要保留其他列,则第二个选项是按员工对记录进行分组,然后在其他列上使用聚合函数,例如。

SELECT DISTINCT

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

答案 1 :(得分:2)

为此目的使用ROW_NUMBER()

;WITH CTE AS (

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

答案 2 :(得分:0)

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

例如:

toastr.options = {
  "closeButton": true,
  "debug": false,
  "newestOnTop": false,
  "progressBar": true,
  "positionClass": "toast-top-right",
  "preventDuplicates": false,
  "onclick": null,
  "showDuration": "300",
  "hideDuration": "1000",
  "timeOut": "5000",
  "extendedTimeOut": "1000",
  "showEasing": "swing",
  "hideEasing": "linear",
  "showMethod": "fadeIn",
  "hideMethod": "fadeOut"
};

答案 3 :(得分:0)

您应该根据fullname,employeeid或其他任何内容对它们进行分组。我已经提到了一个简单的示例,向您展示如何在SQL查询中使用group by命令:

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;

我希望它适合你。

相关问题