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.
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!
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;
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.
Answered by Javi fer2 on January 1, 2022
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP