消除重复记录

时间:2017-11-03 09:44:44

标签: sql sql-server postgresql

我为一个进行家访的组织工作,我需要创建一个详细说明重复的查询,重复项在同一天访问一个地址表示。我的表格包括以下几个字段

WorkNo        Address               Appointment Date
54            12 Stackoverflow      12/07/2017
55            12 Stackoverflow      12/07/2017
56            103 London Rd         15/08/2017
57            11 Peterborough Way   19/08/2017
58            12 Stackoverflow      21/09/2017

正如您所看到的那样,在同一天为同一地址创建了2个工作号码(54和55),我需要消除它们。工作号58很好,因为约会日期是另一天。想想我在想它并且可能是一个直接的解决方案但我无法想出来!

为编辑道歉并且可能是误导性标题,我想我并没有真正尝试消除查询中的重复项,我需要展示它们,因此可以在报告中识别它们。

 WorkNo        Address               Appointment Date
    54            12 Stackoverflow      12/07/2017
    55            12 Stackoverflow      12/07/2017
    78            15 Howards Way        15/07/2017
    79            15 Howards Way        15/07/2017

我之前提到过我在SQL Server 2012中工作,但是如果你也可以为PostgreSQL提供答案,我将不胜感激,谢谢

2 个答案:

答案 0 :(得分:1)

使用$this->db->select('status,count(status)'); $this->db->group_by('status'); // apply group by $query = $this->db->get();

row_number()

这将保留一行重复项。如果您想要实际删除所有重复项,请改为使用with hv as ( select hv.*, row_number() over (partition by address, appointment_date order by workno) as seqnum from housevisits hv ) select hv.* from hv where seqnum = 1;

count()

答案 1 :(得分:1)

使用CTE实现这一目标。

WITH CTE AS
(  
SELECT Address, AppointmentDate, row_number() over (partition by Address, AppointmentDate order by Address, AppointmentDate) AS rownum FROM TableName 
)  
DELETE FROM CTE WHERE rownum > 1