Consulta SQL para filtrar las filas duplicadas de una columna por el DateTime Mínimo de las filas correspondientes -- sql campo con datetime camp Relacionados El problema

SQL query for filtering duplicate rows of a column by the minimum DateTime of those corresponding rows


0
vote

problema

Español

Tengo una tabla de base de datos SQL, "Helium_Test_Data", que tiene varias entradas basadas en la columna KEYID (el teclado representa una parte probada única). Necesito consultar las entradas y solo mostrar una entrada por clave (parte) según la fecha de creación más antigua (el ejemplo de formato es 2018-12-29 08: 22: 11.123). Esto se debe a que la misma parte se probó varias veces, pero la primera lectura es la que necesito usar. Aquí está la consulta actualmente probada:

  SELECT mt.* FROM Helium_Test_Data mt INNER JOIN (     SELECT            KeyID,            MIN(DateTime) AS DateTime       FROM Helium_Test_Data       WHERE PSNo='11166565'       GROUP BY KeyID ) t ON mt.KeyID = t.KeyID AND mt.DateTime = t.DateTime   WHERE PSNo='11167197'    AND (mt.DateTime > '2018-12-29 07:00')    AND (mt.DateTime < '2018-12-29 18:00') AND OK=1    ORDER BY KeyId,DateTime   

Solo devuelve las filas que no tienen un teclado duplicado presente en la tabla, mientras que necesito una fila por cada teclado (duplicado o no). Y para los duplicados, necesito la fecha más temprana.

Gracias de antemano por la ayuda.

Original en ingles

I have a SQL database table, "Helium_Test_Data", that has multiple entries based on the KeyID column (the KeyID represents a single tested part ). I need to query the entries and only show one entry per KeyID (part) based on the earliest creation date-time (format example is 2018-12-29 08:22:11.123). This is because the same part was tested several times but the first reading is the one I need to use. Here is the query currently tried:

SELECT mt.* FROM Helium_Test_Data mt INNER JOIN (     SELECT            KeyID,            MIN(DateTime) AS DateTime       FROM Helium_Test_Data       WHERE PSNo='11166565'       GROUP BY KeyID ) t ON mt.KeyID = t.KeyID AND mt.DateTime = t.DateTime   WHERE PSNo='11167197'    AND (mt.DateTime > '2018-12-29 07:00')    AND (mt.DateTime < '2018-12-29 18:00') AND OK=1    ORDER BY KeyId,DateTime 

It returns only the rows that have no duplicate KeyID present in the table whereas I need one row per every single KeyID (duplicate or not). And for the duplicate ones, I need the earliest date.

Thanks in advance for the help.

     
 
 

Lista de respuestas

1
 
vote
vote
La mejor respuesta
 

Uso row_number() Función de la ventana que admite la mayoría de DBMS

  select * from  (  select *,row_number() over(partition by KeyID order by DateTime) rn from Helium_Test_Data ) t where t.rn=1   

o podría usar la subconsía corelatada

  select t1.* from Helium_Test_Data t1 where t1.DateTime= (select min(DateTime)                    from Helium_Test_Data t2                     where t2.KeyID=t1.KeyID                    )   
 

use row_number() window function which support most dbms

select * from  (  select *,row_number() over(partition by KeyID order by DateTime) rn from Helium_Test_Data ) t where t.rn=1 

or you could use corelated subquery

select t1.* from Helium_Test_Data t1 where t1.DateTime= (select min(DateTime)                    from Helium_Test_Data t2                     where t2.KeyID=t1.KeyID                    ) 
 
 
 
 

Relacionados problema

3  Calculando un delta de años desde una cita  ( Calculating a delta of years from a date ) 
Estoy tratando de descubrir una manera de calcular el año de nacimiento para los registros cuando se le da la edad a dos decimales en una fecha determinada, e...

41  Convierta la cadena hasta la fecha en .NET si mi formato de fecha entrante está en yyyymmdd  ( Convert string to date in net if my incoming date format is in yyyymmdd ) 
¿Cuál es la mejor manera de convertir la cadena hasta la fecha en C # si mi formato de fecha entrante está en YYYYMMDD EX: 20001106 ...

0  Cómo convertir la fecha en el cuadro de texto a MySQL DateTime Format  ( How to convert date in text box to mysql datetime format ) 
Soy bastante nuevo en PHP y he estado leyendo Larry Ullman Libro para desarrollar un sitio básico de DB. He utilizado el selector de la fecha de YUI Calendar ...

2  C # fechas - bases de datos, pantalla y localización  ( C sharp dates databases display and localization ) 
Qué son algunas de las mejores prácticas de Fecha (y AMP) Formato de las mejores prácticas cuando quiera adherirse a la localización en una nueva aplicación. ...

1563  Calcular el tiempo relativo en C #  ( Calculate relative time in c sharp ) 
Dado un valor específico double16 , ¿cómo mostrar el tiempo relativo, como: hace 2 horas hace 3 días hace un mes ...

68  ¿Cómo analizar un tiempo en un objeto de fecha de la entrada del usuario en JavaScript?  ( How to parse a time into a date object from user input in javascript ) 
Estoy trabajando en un widget de formularios para que los usuarios ingresen una hora del día en una entrada de texto (para una solicitud de calendario). Uso d...

17  Tiempo de falsificación sin cambiar el reloj del sistema de Windows  ( Faking time without changing windows system clock ) 
¿Alguien sabe de una herramienta de Windows para reportar fechas / horarios falsos a un proceso? Aparentemente hay programas de Linux que se pueden usar par...

1955  ¿Cómo calculo la edad de alguien en función de un cumpleaños tipo DateTime?  ( How do i calculate someones age based on a datetime type birthday ) 
Dado un Form5 que representa el cumpleaños de una persona, ¿cómo calculo su edad en años? ...

85  ¿Cómo eliminar la parte de tiempo de un valor de DateTime (SQL Server)?  ( How to remove the time portion of a datetime value sql server ) 
Aquí está lo que uso: SELECT CAST(FLOOR(CAST(getdate() as FLOAT)) as DATETIME) Estoy pensando que puede haber una manera mejor y más elegante. Requis...

-1  Operación MySQL DateTime  ( Mysql datetime operation ) 
¿Cómo obtener el valor de DateTime Varios días / semanas / meses / años más tarde en MySQL? Solo sé que el DateTime actual es ahora (). ...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos