【发布时间】:2015-01-10 09:30:18
【问题描述】:
我正在尝试从以下结果集中删除重复条目:
ID Name missionID teamID eventTimestamp
25 C 1000415147500265653 1 02-11-2014 14:04
25 C 1000415147500265653 1 02-11-2014 14:04
25 C 1000415147500265653 1 02-11-2014 14:04
25 C 1000415147500265653 1 02-11-2014 14:04
25 C 1000415147500265653 2 02-11-2014 14:06
25 C 1000415147500265653 2 02-11-2014 14:06
25 C 1000415147500265653 2 02-11-2014 14:06
25 C 1000415147500265653 2 02-11-2014 14:07
25 C 1000415147500265653 2 02-11-2014 14:07
25 C 1000415147500265653 1 02-11-2014 14:08
25 C 1000415147500265653 1 02-11-2014 14:08
对于 targetID、targetName、missionID、teamID 和 eventTimestamp 的每个组合,我只需要 1 个条目。所以我希望结果集看起来像这样而不是上面的:
targetID targetName missionID teamID eventTimestamp
25 C 1000415147500265653 1 02-11-2014 14:04
25 C 1000415147500265653 2 02-11-2014 14:06
25 C 1000415147500265653 2 02-11-2014 14:07
25 C 1000415147500265653 1 02-11-2014 14:08
如您所见。可能有其他条目具有相同的 targetID、targetName、missionID、teamID 组合,但时间戳不同 - 我需要保留这些条目,因此我不能只在此运行最大或最小日期。我尝试过使用 distinct、ranking 和 group by,但似乎没有任何效果,我不断收到重复的条目。如果我在 date 上使用 max 或 min,我只会得到每个 targetID、targetName、missionID、teamID 的一个条目——这不是我想要的
我最初的查询只是为了得到重复的结果集是这样的:
select targetID, targetName, missionID, teamID, eventTimestamp from (
select a.characterID, a.targetID, a.targetName, a.missionID, b.teamID as teamID, a.eventTimestamp from events_live a
left join (
select distinct characterID, teamID from events_live where eventName = 'missionStarted' or eventName = 'characterCreated') b on a.characterID = b.characterID
where eventName ='missionObjective' and a.eventTimestamp > '2014-10-31' and a.eventTimestamp < '2014-11-07' and objectiveName = 'Capture' and (targetID ='25' or targetID='26' or targetID ='27' or targetID = '28' or targetID = '29') and b.teamID is not null
order by missionID, targetID, eventTimestamp
)t1
order by missionID, targetID, eventTimestamp
我已经尝试在原始对象的基础上使用 group by targetID、targetName、missionID、teamID、eventTimestamp 进行另一次选择 - 但我仍然得到重复项。我试过在 eventTimestamp 上运行 distinct,但它仍然没有给我想要的
【问题讨论】:
标签: postgresql duplicates