It depends on what kind of duplicity you mean:
1) If you have multiple Windows Event Log monitors configured to capture same event from the same node then you can:
a) change this configuration in manner that each type event can be captured only by one monitor (recommended)
b) tight report only to specific monitor instance(s) e.g. add "AND c.Name = 'My specific monitor'" to WHERE condition of report query
c) make report query much more complex based on fact that a.NodeID + wed.LogFile + wed.RecordNumber should uniquely identify event captured by multiple monitors
2) You would like to see event which is still repeated with the same message (but in fact we are talking about multiple events as they differs by time) only once in your report, than you can try following modification of report query:
SELECT n.Caption, n.NodeID, c.Name as ComponentName, c.ID as ComponentID, wed.LogFile, MAX(wed.TimeGeneratedUtc) LastTimeGeneratedUtc, wed.EventCode, wed.SourceName, wed.[Message], COUNT(*) as EventCount FROM APM_WindowsEvent_Detail wed INNER JOIN APM_Component c ON wed.ComponentID = c.ID INNER JOIN APM_Application a ON c.ApplicationID = a.ID INNER JOIN Nodes n ON a.NodeID = n.NodeID WHERE wed.EventType = 1 AND wed.TimeGeneratedUtc > DATEADD(hour, -24, GETUTCDATE()) GROUP BY n.Caption, n.NodeID, c.Name, c.ID, wed.LogFile, wed.EventCode, wed.SourceName, wed.[Message]