1

次の形式で最小/最大時間をキャプチャするテーブルがあります。

1      2012-10-30 12:13:07.000        2012-10-30 15:18:50.000   
2      2012-10-30 16:13:07.000        2012-10-30 21:18:50.000

datetime次の表のように、同じユーザーに対して2 つの異なるセットをキャプチャできるかどうか疑問に思っていました。これを行う理由は、複数のシフトでいつでも出入りできる請負業者の出勤を管理するためにデータが使用されるためです。つまり、UID 1 は 12:00 に出勤し、15:00 に出勤し、後で戻って 18:00 に出勤し、21:00 に出勤することができ、タイムシートやシフト スケジュールでは機能しません。

uid    clock                          clock                    Status  
1      2012-10-30 12:00:00.000        2012-10-30 15:00:00.000   regular
1      2012-10-30 18:00:00.000        2012-10-30 21:00:00.000   Split
2      2012-10-30 16:13:07.000        2012-10-30 21:18:50.000   regular

どんな提案でも大歓迎です。

4

1 に答える 1

0

アプリケーションの詳細についてあまり知らなくても、データを構造化する最良の方法は、テーブルの各レコードを各従業員の単一の「パンチイン/パンチアウト」に対応させることだと思います。そこから、特定の期間に各従業員が働いた時間を計算するのは非常に簡単です。私は間違っていません.2番目の例(Status列を除いて)でレイアウトされるデータを説明した方法とほとんど同じように聞こえます。

最も単純な例では、テーブルに次の列があります。

UID (INT or uniqueidentifier)
ClockIn (datetime)
ClockOut (datetime)

従業員が出勤したら、その従業員のテーブルに行を挿入し、そのClockIn列の下に時計を入れます。

UID     ClockIn                    ClockOut
-------------------------------------------
1       2012-10-30 12:00:00.000    NULL

各従業員が出勤すると、それぞれに列が与えられます

UID     ClockIn                    ClockOut
-------------------------------------------
1       2012-10-30 12:00:00.000    NULL
2       2012-10-30 1:00:00.000     NULL
3       2012-10-30 2:00:00.000     NULL

従業員が退勤すると、アプリケーションはその従業員の既存のレコードを取得し、列を退勤時間にUPDATE設定して行を取得する必要があります。ClockOut

UID     ClockIn                    ClockOut
-------------------------------------------
1       2012-10-30 12:00:00.000    NULL
2       2012-10-30 1:00:00.000     2012-10-30 3:30:00.000
3       2012-10-30 2:00:00.000     NULL

従業員が退勤して後で戻ってきた場合、その日の早い時間に出勤したかのように、新しいレコードが与えられます。

UID     ClockIn                    ClockOut
-------------------------------------------
1       2012-10-30 12:00:00.000    NULL
2       2012-10-30 1:00:00.000     2012-10-30 3:30:00.000
3       2012-10-30 2:00:00.000     NULL
2       2012-10-30 4:30:00.000     NULL

願わくば、この時点で、このかなり単純なデータ モデルが、標準的な時間管理機能のほとんどを可能にするのに十分なほど柔軟であることがわかるはずです。

  • ClockOutNULLである行を探すことで、誰が出勤しているかを判断できます。
  • 従業員がパンチを忘れた場合に処理するための何らかのプロセスを用意できます
  • 出勤または遅刻する従業員のパンチを編集します。
  • 行ごとに と を実行し、結果を合計することで、DATEDIFFClockOut従業員の合計労働時間を特定できます。ClockIn

この例では、データを検証する責任のほとんどは、後でアプリケーションで行われます。誰かに何度も出勤してもらったり、まだ出勤していないのに退勤させたりしたくないでしょう。

于 2012-12-31T19:33:06.857 に答える