私は生産ラインでビジュアライゼーションを作成しようとしています。私たちには数百人の人々が乗っている2つの行があり、それぞれに異なる乗組員シフト戦略があります。私は、レコードをループすることでAccessで必要な結果を生成することができました。 私はそれをSQL Serverにアップスケールして速度を向上させたいと思います。時間当たりの労働時間を計算する方法
誰かが正しい方向に向いていますか?ここで
Accessで動作するVBAコードです。
Public Function MakeLaborData()
Dim db As dao.Database
Dim rs As dao.Recordset
Dim hr As Date
Dim LaborOn As Date
Dim LaborOff As Date
Dim Hours As Double
Set db = CurrentDb
Set rs1 = db.OpenRecordset("t_Labor") 'myTable is a MS-Access table created previously
Set rs2 = db.OpenRecordset("t_Labor_by_Hour")
Do While Not rs1.EOF
LaborOn = rs1.Fields("LABOR_ON").Value
If IsNull(rs1.Fields("LABOR_OFF").Value) Then
LaborOff = Now()
Else
LaborOff = rs1.Fields("LABOR_OFF").Value
End If
hr = DateSerial(DatePart("yyyy", LaborOn), DatePart("m", LaborOn), DatePart("d", LaborOn)) + (DatePart("h", LaborOn)/24)
Do Until hr > LaborOff
If LaborOn > hr And LaborOff < hr + 1/24 Then
Hours = (LaborOff - LaborOn) * 24
ElseIf LaborOn > hr And LaborOff > hr + 1/24 Then
Hours = ((hr + 1/24) - LaborOn) * 24
ElseIf LaborOn < hr And LaborOff > hr + 1/24 Then
Hours = 1
ElseIf LaborOn < hr And LaborOff < hr + 1/24 Then
Hours = (LaborOff - hr) * 24
Else
Hours = 0
End If
With rs2
.AddNew
!Line_Number = rs1!UNIT
!SOI = rs1!JOB
!Employee = rs1!Employee
!Hour_of_Day = hr
!Labor_Hours = Hours
.Update
End With
hr = hr + 1/24
Loop
rs1.MoveNext
Loop
rs1.Close
rs2.Close
End Function
ボブは1.75時間を働けば、あなたは午前6時30分に開始ボブのための1つの行を持っているでしょうので、私は、スタートを含むテーブルをお勧めしますし、一人あたりの各シフト(作業期間)の時間を停止したい
あなたのデータ構造、試したクエリ、期待される出力を教えてください。スクリーンショットからあなたを援助するにはどうすればよいですか? – artm
OK。サンプルデータセットをここにアップロードするにはどうすればよいですか? –