0

私は 2 つのテーブルを持っています。1 つは時間で保存されたクロッキングで、もう 1 つは ClockInLogs.TimeIn と TimeOut の間の休憩を保存します。各クロックインタイムには、常に複数の休憩があります。

ClockInLogs - 
ID - int
TimeIn - DateTime
TimeOut - DateTime


Breaks - 
CID - Int (joined to ClockInLogs.ID)
TimeIn - DateTime
TimeOut - DateTime

私の SQL クエリでは、出勤ごとに休憩列の合計時間数を取得する必要があります。これまでのところ、私は -

SELECT
    C.ID,
    C.ClockDateTimeIn as 'Date',
    DATENAME(dw, C.ClockDateTimeIn) as 'DayOfWeek',
    C.UserID,
    C.ClockDateTimeIn as 'ClockInTime',
    C.ClockDateTimeOut as 'ClockOutTime',
    DATEDIFF(minute, ClockDateTimeIn, ClockDateTimeOut) as 'Att'
FROM clockinlogs C
INNER JOIN breaks b on C.ID = b.CID
INNER JOIN Users u on C.UserID = u.ID

次に必要な列は、休憩内の総時間数です。基本的に、Break.TimeIn と Break.TimeOut ごとに時間の差を計算し、それぞれの休憩を追加します。

これが理にかなっていることを願っています!

4

2 に答える 2

0

これがうまくいくことを願っています:

    SELECT C.ID
           ,C.ClockDateTimeIn as 'Date' 
           ,DATENAME(dw, C.ClockDateTimeIn) as 'DayOfWeek'
           ,C.UserID
           ,C.ClockDateTimeIn as 'ClockInTime'
           ,C.ClockDateTimeOut as 'ClockOutTime'
           ,SUM(convert(time,(b.TimeOut - b.TimeIn))) Att_time
           ,SUM(DATEDIFF(MI, ClockDateTimeIn, ClockDateTimeOut)) Att_minute
           ,SUM(DATEDIFF(HH, ClockDateTimeIn, ClockDateTimeOut)) Att_hour
      FROM clockinlogs C
      JOIN breaks b 
        ON C.ID = b.CID
      JOIN Users u 
        ON CID=ID
  GROUP BY C.ID
           ,C.UserID
           ,C.ClockDateTimeIn
           ,C.ClockDateTimeOut

Att_time は、brekatime をデータ型 time に変換します

なぜユーザーに参加するのですか? 名前を取得するには?

于 2013-09-13T15:17:50.673 に答える