es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Agrupa por filas que estén en secuencia.

Considere que tengo una tabla como esta:

PASAJERO CIUDAD FECHA
43 NUEVA YORK 1-ene-21
44 CHICAGO 4-ene-21
43 NUEVA YORK 2-ene-21
43 NUEVA YORK 3-ene-21
44 ROMA 5-ene-21
43 LONDRES 4-ene-21
44 CHICAGO 6-ene-21
44 CHICAGO 7-ene-21

¿Cómo agruparía la columna Pasajero y Ciudad en secuencia para obtener un resultado como el siguiente?

PASAJERO CIUDAD CONTAR
43 NUEVA YORK 3
44 CHICAGO 1
44 ROMA 1
43 LONDRES 1
44 CHICAGO 2

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para agrupar las columnas Passenger y City en secuencia, podemos utilizar la técnica de Gaps and Islands en SQL. Así es como podemos hacerlo:

    SELECT 
      PASSENGER, 
      CITY, 
      COUNT(*) AS COUNT
    FROM (
      SELECT 
        PASSENGER, 
        CITY, 
        DATE, 
        ROW_NUMBER() OVER (ORDER BY DATE) AS RN,
        ROW_NUMBER() OVER (PARTITION BY PASSENGER, CITY ORDER BY DATE) AS GRP
      FROM table_name
    ) t
    GROUP BY 
      PASSENGER, 
      CITY, 
      (RN - GRP)
    ORDER BY 
      (RN - GRP), 
      COUNT DESC;
    

    Desglosemos la consulta paso a paso:

    • Primero seleccionamos las columnas Passenger, City y COUNT(*) de una subconsulta.
    • En la subconsulta, utilizamos la función ROW_NUMBER() para generar números de fila secuenciales basados en la columna Date (RN) y la combinación de las columnas Passenger y City (GRP).
    • Luego restamos GRP de RN para crear un ID de grupo único para cada grupo de filas consecutivas con la misma combinación de Passenger y City.
    • Finalmente, agrupamos por el Passenger, City y el ID de grupo único calculado y ordenamos el resultado por el mismo ID en orden ascendente y COUNT en orden descendente.

    El resultado será el siguiente:

     PASSENGER  CITY       COUNT
     43         NEW YORK   3
     44         CHICAGO    1
     44         ROME       1
     43         LONDON     1
     44         CHICAGO    2
    

    Esto agrupará las filas con la misma combinación de Passenger y City que aparecen consecutivamente en la tabla y contará su ocurrencia.

Comments are closed.