如何计算不同表中两个时间列之间的差异?

时间:2019-01-30 17:20:46

标签: sql sql-server tsql

我需要计算工人协助的EntryHourSchedule(理想时间)和EntryHourRegistered(实时)之间的差,但是两者都在2个不同的表中:ScheduleDetail(带Schedule的*到1)和注册表。

我使用

datediff(second, start_date, end_date) / 3600.0
和下一个tables进行计算。

就像这样:

SELECT I.IdTrabajador, I.Fecha
    , Datediff(second
        , I.HoraInicioRefrigerio
        , (SELECT HD.HoraInicioRefrigerio
            FROM [rrhh].TrabajadorHorarioDetalle HD INNER JOIN [rrhh].TrabajadorHorario H
                ON HD.IdTrabajadorHorario = H.IdTrabajadorHorario
            WHERE H.Estado = 1 AND HD.Estado = 1 AND HD.Dia = (SELECT Datename(dw, I.Fecha))
            )
        ) / 3600.0 as Cantidad
    , 0.00 as Costo
FROM [rrhh].TrabajadorIncidencia I

但是导致错误:子查询返回了多个值,当它在=,之后时是不正确的! =,<,<=,>,> =或当它用作表达式时。

最后,应该显示它,例如:IdTrabajador: 1 | Fecha: '2019-01-29' | Cantidad: 1.5

谢谢。

1 个答案:

答案 0 :(得分:0)

您在子查询中错过了IdTrabajador上的链接:

SELECT I.IdTrabajador, I.Fecha
    , Datediff(second
        , I.HoraInicioRefrigerio
        , (SELECT HD.HoraInicioRefrigerio
            FROM [rrhh].TrabajadorHorarioDetalle HD INNER JOIN [rrhh].TrabajadorHorario H
                ON HD.IdTrabajadorHorario = H.IdTrabajadorHorario
            WHERE H.Estado = 1 AND HD.Estado = 1 AND HD.IdTrabajador = I.IdTrabajador AND HD.Dia = (SELECT Datename(dw, I.Fecha))
            )
        ) / 3600.0 as Cantidad
    , 0.00 as Costo
FROM [rrhh].TrabajadorIncidencia I