TransWikia.com

¿Como obtener un solo registro cuando "Employee_ID" y "Name" se repiten, pero las columnas "Time" y "temperatureInf" son diferentes?

Stack Overflow en español Asked on January 1, 2022

¡Hola a todos!
Como podrán ver, soy novato en esto de SQL Server, ya que me parece que esta consulta es muy sencilla, pero la verdad ya me he atorado un poco con este tema. El problema es el siguiente:

1.- De una tabla llamada "Allevent", que cuenta con columnas Employee_ID, Name, Time y temperatureInf, necesito hacer una consulta que me traiga un solo registro; ya he intentado varias consultas, desde el uso del "distinct", filtros con "where" y uso del "group by", pero mi conocimiento me limita a entender que más podría hacer, miren aquí una imagen de mi resultado, el cual ya me entrega parte de lo que deseo, sin embargo aun me dúplica registros, yo solo quiero uno sin importar si es el primero, segundo o ultimo de los repetidos.

introducir la descripción de la imagen aquí

Como ven al hacer mi consulta se siguen repitiendo los registros, pero yo solo quiero uno solo sin importar cual sea.

¡De antemano muchas gracias comunidad!

One Answer

Una de las soluciones que puedes plantear es numerar filas.

El escenario que planteas:

Create table dbo.Allevent17 
(
  Employee_ID int
, Name varchar(100)
, Time datetime2
, temperatureinfo decimal(4,2)
, Overtemperature varchar(100)
);
GO
insert into dbo.Allevent17(Employee_ID, Name, Time, temperatureinfo, Overtemperature)
values
(10,'ALBERTO TRUJILLO', '20200711 07:35', 35.8, 'normal'),
(10,'ALBERTO TRUJILLO', '20200711 07:35', 35.9, 'normal'),
(13,'DANIEL CORDERO', '20200711 06:45', 35.8, 'normal'),
(13,'DANIEL CORDERO', '20200711 06:46', 35.9, 'normal'),
(13,'DANIEL CORDERO', '20200711 07:28', 35.8, 'normal'),
(13,'DANIEL CORDERO', '20200711 07:28', 35.9, 'normal'),
(13,'DANIEL CORDERO', '20200711 07:50', 35.7, 'normal'),
(13,'DANIEL CORDERO', '20200711 07:50', 36.1, 'normal'),
(14,'ABEL RIVERA', '20200711 07:35', 36, 'normal'),
(14,'ABEL RIVERA', '20200711 07:35', 36.2, 'normal'),
(15,'JOSE DE JESUS', '20200711 07:28', 35.8, 'normal');
GO

Ahora podemos utilizar una tabla de expresión común para "recoger" los registros de la tabla y numerarlos particionados por el código de empleado.

WITH CTE
     AS (SELECT EMPLOYEE_ID
              , NAME
              , Time
              , temperatureinfo
              , Overtemperature
              , ROW_NUMBER() OVER (PARTITION BY EMPLOYEE_ID ORDER BY TIME) AS ROW
                FROM Allevent17
                WHERE Time >= '20200711' AND Time < '20200712' AND Name IS NOT NULL)
     SELECT   c.Employee_ID
            , c.Name
            , c.Time
            , c.temperatureinfo
            , c.Overtemperature
            FROM CTE c
        WHERE ROW = 1;

Resultado

Si observas la query, de la tabla de expresión común, se realiza un select sobre alleven17 con las restricciones por fecha y nombre planteadas y lo más importante, se numeran las filas empezando en 1 pero por cada employee_id. Como row_number exige una ordenación y te da igual, he escogido time como criterio de ordenación de los registros de cada empleado.

Tablas de expresión común (cte)

Numerar filas con Row number

Answered by Javi fer2 on January 1, 2022

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP