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.

Crear particiones basadas en los valores de las columnas en SQL.

Soy muy nuevo en sql y en la escritura de consultas y después de mucho intentar, estoy pidiendo ayuda.
Como se muestra en la imagen, quiero crear una partición de datos basada en is_late = 1 y mostrar su cantidad (que es 2), pero al mismo tiempo quiero capturar el valor de last_status donde is_late = 0 para mostrarlo en una sola fila.

La tarea consiste en calcular cuántas veces el conductor llegó tarde y el tiempo que le llevó desde la primera ocurrencia del tiempo estimado hasta el last_status.

Resultado deseado:

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para obtener el resultado deseado, puedes utilizar una combinación de funciones SQL como COUNT, MAX y DATEDIFF. Aquí tienes un ejemplo de consulta:

    SELECT 
      COUNT(*) AS late_count,
      MAX(CASE WHEN is_late = 0 THEN last_status END) AS last_status,
      DATEDIFF(MIN(estimated_time), MAX(CASE WHEN is_late = 0 THEN last_status_time END)) AS time_taken
    FROM 
      table_name PARTITION BY is_late = 1;
    

    Explicación:

    1. Utiliza la función COUNT para contar el número de filas donde is_late = 1.
    2. Utiliza la función MAX con una declaración CASE para capturar el valor de last_status donde is_late = 0.
    3. Utiliza la función DATEDIFF con una combinación de MIN y MAX para calcular el tiempo transcurrido desde la primera aparición de estimated_time hasta el último last_status donde is_late = 0.
    4. Utiliza la cláusula PARTITION BY para crear una partición separada para cada valor de is_late.

    Esta consulta debería retornar el resultado deseado. Ten en cuenta que debes reemplazar table_name con el nombre real de tu tabla. Además, asegúrate de tener índices en las columnas relevantes para garantizar un rendimiento óptimo de la consulta.

Comments are closed.