Necesito encontrar todos los registros donde dos campos en una tabla ocurren más de una vez en un rango de fechas específico. He utilizado lo siguiente, que me permite mostrar los duplicados, pero necesito especificar dentro de un período de tiempo, cada vez que intento incluir un rango de fechas, comienza a mostrar todos los registros, no solo los duplicados.

Cualquier ayuda sería muy apreciada!

SELECT  
y.ID,y.site,y.machine
  FROM calls y
    INNER JOIN (SELECT
                    site,machine, COUNT(*) AS CountOf
                    FROM calls
                    GROUP BY site,machine
                    HAVING COUNT(*)>1
                ) dt ON y.site=dt.site and y.machine=dt.machine
0
Sam M 22 ago. 2016 a las 18:19

2 respuestas

La mejor respuesta

Debe colocar el rango de fechas donde / en condición en ambas declaraciones SQL (interna y externa) para obtener los registros exactos que está buscando. Esto se puede hacer a través de declaraciones where de la siguiente manera:

SELECT  
y.ID,y.site,y.machine
  FROM calls y
    INNER JOIN (SELECT
                    site,machine, COUNT(*) AS CountOf
                    FROM calls
                    WHERE Date BETWEEN StartOfRange AND EndOfRange
                    GROUP BY site,machine
                    HAVING COUNT(*)>1
                ) dt ON y.site=dt.site and y.machine=dt.machine
WHERE
    y.Date BETWEEN StartOfRange AND EndOfRange
0
Matt 22 ago. 2016 a las 15:57

Prueba esto:

SELECT y.ID,
       y.site,
       y.machine
FROM   calls y
WHERE  y.date BETWEEN ... AND ...
  AND  EXISTS (SELECT x.ID
               FROM   calls x
               WHERE  x.site = y.site
                 AND  x.machine = y.machine
                 AND  x.date BETWEEN ... AND ...
                 AND  x.ID <> y.ID);
-1
Robert Kock 22 ago. 2016 a las 15:25