none
Query para mostrar el primer y último registro de cada grupo en una misma tabla RRS feed

  • Pregunta

  • Que tal.


    ¿Podrían por favor apoyarme?, necesito hacer un Query para obtener el primer y último registro de una tabla, de la siguiente manera.

    1.-Agrupar todos los registros por número de parte

    2.-Seleccionar el primer y último registro de cada grupo.

    Ejemplo:

    Fecha/Hora Máquina Número Parte Modelo
    Thu Apr 05 02:47:08 CDT 2018 1 4180 1
    Thu Apr 05 02:52:28 CDT 2018 1 4180 1
    Thu Apr 05 02:58:08 CDT 2018 1 4180 1
    Thu Apr 05 03:00:18 CDT 2018 1 4180 1
    Thu Apr 05 03:14:38 CDT 2018 1 4180 1
    Thu Apr 05 03:20:38 CDT 2018 1 4180 1
    Thu Apr 05 03:28:58 CDT 2018 1 4180 1
    Thu Apr 05 03:36:28 CDT 2018 1 4180 1
    Sun Apr 01 22:43:48 CDT 2018 1 4146 2
    Sun Apr 01 22:49:38 CDT 2018 1 4146 2
    Sun Apr 01 22:55:48 CDT 2018 1 4146 2
    Sun Apr 01 23:01:28 CDT 2018 1 4146 2
    Sun Apr 01 23:09:58 CDT 2018 1 4146 2
    Sun Apr 01 23:24:08 CDT 2018 1 4146 2
    Sun Apr 01 23:28:38 CDT 2018 1 4146 2
    Sun Apr 01 23:34:18 CDT 2018 1 4146 2


    El resultado, quedaría de la siguiente manera:

    Fecha/Hora Máquina Número Parte Modelo
    Thu Apr 05 02:47:08 CDT 2018 1 4180 1
    Thu Apr 05 03:36:28 CDT 2018 1 4180 1
    Sun Apr 01 22:43:48 CDT 2018 1 4146 2
    Sun Apr 01 23:34:18 CDT 2018 1 4146 2








    Rigo_MX

    viernes, 6 de abril de 2018 22:02

Todas las respuestas

  • Hola Rigo_MX:

    Una solución es:

    create table datos(fecha datetime, maquina int, numparte int, modelo int)
    go
    insert into datos (fecha, maquina, numparte, modelo) values
    ('20180405 02:47:08',1,4180,1),
    ('20180405 02:52:08',1,4180,1),
    ('20180405 03:00:18',1,4180,1),
    ('20180405 03:14:38',1,4180,1),
    ('20180405 03:28:08',1,4180,1),
    ('20180405 03:36:08',1,4180,1),
    ('20180401 22:43:48',1,4146,2),
    ('20180401 22:49:38',1,4146,2),
    ('20180401 22:55:48',1,4146,2),
    ('20180401 23:01:28',1,4146,2),
    ('20180401 23:09:48',1,4146,2),
    ('20180401 23:24:48',1,4146,2),
    ('20180401 23:28:48',1,4146,2),
    ('20180401 23:34:48',1,4146,2)
    go
    select min(d.fecha), d.maquina, d.numparte, d.modelo 
    	from datos d
    		group by  d.maquina, d.numparte, d.modelo
    union all
    select max(d.fecha), d.maquina, d.numparte, d.modelo 
    	from datos d
    		group by  d.maquina, d.numparte, d.modelo
    order by modelo
    
    

    El campo fecha hora, en la salida, puedes formatearlo como desees.

    Un saludo

    sábado, 7 de abril de 2018 5:22
  • La resolución del problema que presentas es muy simple, quizá le suma algo de "complejidad" el formato de fecha que tiene la columna 'Fecha/Hora' (entiendo es de tipo varchar()). Los valores de la columna 'Fecha/Hora' determinan el criterio de ordenamiento y como cadena de caracteres no se podrá obtener los resultados correctamente, es necesario convertirlo a un valor "correctamente ordenable". En ese contexto, ¿cada grupo de número de parte -por ejemplo el número 4146- corresponde a un sólo día? ¿o las filas de cada grupo podrían tener fecha distintas? ¿días distintos? ¿meses distintos?
    sábado, 7 de abril de 2018 6:01