我为一个进行家访的组织工作,我需要创建一个详细说明重复的查询,重复项在同一天访问一个地址表示。我的表格包括以下几个字段
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提供答案,我将不胜感激,谢谢
答案 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