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.

¿Cómo puedo extraer la hora de inicio y fin de una fecha/hora en SQL Server?

Me gustaría obtener la hora de inicio y la hora de finalización de las filas de datos.
La hora de inicio es el “ActivityStart” y la hora de finalización es el “ActivityEnd” en la tabla.
Mi tabla se ve así:

EventTime Clase Actividad
13/12/2021 09:02 ACTIVITYSTART Stock Audit
13/12/2021 12:19 ACTIVITYEND Stock Audit
13/12/2021 12:19 ACTIVITYSTART Inventory
13/12/2021 12:38 LOGOUT Inventory
13/12/2021 12:38 ACTIVITYEND Inventory
13/12/2021 12:47 LOGIN None
13/12/2021 12:47 ACTIVITYSTART Marshalling
13/12/2021 12:47 ACTIVITYEND Marshalling
13/12/2021 13:40 ACTIVITYSTART Stock Audit
13/12/2021 15:06 ACTIVITYEND Stock Audit

Se espera que tenga una tabla que se vea así:

Fecha Nombre de Actividad Hora de Inicio Hora de Finalización Minutos transcurridos
13/12/2021 Stock Audit 09:02 12:19 —–
13/12/2021 Inventory 12:19 12:38 —–
13/12/2021 Marshalling 12:47 12:47 —–
13/12/2021 Stock Audit 13:40 15:06 —–
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para obtener la hora de inicio y fin de las filas de datos, podemos usar una consulta SQL que seleccione las columnas necesarias de la tabla, agrupe los datos por el nombre de la actividad y calcule la hora de inicio y fin en función de la columna Event_Time y el tipo de actividad (ACTIVITY_START y ACTIVITY_END). También podemos calcular el tiempo transcurrido entre la hora de inicio y fin usando la función DATEDIFF.

    La consulta SQL se vería algo así:

    SELECT 
        CONVERT(varchar, Event_Time, 103) AS Fecha, 
        Activity AS Nombre_Actividad, 
        MIN(CASE WHEN Class = 'ACTIVITY_START' THEN CONVERT(varchar, Event_Time, 108) END) AS Hora_Inicio,
        MAX(CASE WHEN Class = 'ACTIVITY_END' THEN CONVERT(varchar, Event_Time, 108) END) AS Hora_Fin,
        DATEDIFF(minute, MIN(CASE WHEN Class = 'ACTIVITY_START' THEN Event_Time END), MAX(CASE WHEN Class = 'ACTIVITY_END' THEN Event_Time END)) AS Minutos_transcurridos
    FROM 
        table_name
    WHERE 
        (Class = 'ACTIVITY_START' OR Class = 'ACTIVITY_END')
    GROUP BY 
        CONVERT(varchar, Event_Time, 103), 
        Activity
    

    Esta consulta nos dará una tabla con las columnas deseadas y el tiempo transcurrido en minutos entre la hora de inicio y fin para cada actividad. Podemos ajustar los nombres de las columnas y el formato según sea necesario.

Comments are closed.