1

私はこれを理解しようと何時間も費やしました。これは製造工場用です。

工場のフロアにいる人は、次のようなデータを生成するコンピューターシステムを使用して、さまざまなマシンでの活動を記録します。

Empnbr  Datestamp   Shift   Machnbr Time
00090   6/30/2010   1   0354    11:10
00090   6/30/2010   1   S       12:00
00098   6/30/2010   1   0920    7:00
00098   6/30/2010   1   0143    7:30
00098   6/30/2010   1   S       15:00
00101   6/30/2010   1   0920    7:00
00101   6/30/2010   1   0247    7:30
00101   6/30/2010   1   0147    7:40
00101   6/30/2010   1   S       15:00
00107   6/30/2010   1   0585    7:00
00107   6/30/2010   1   0143    12:00
00107   6/30/2010   1   S       15:00
00109   6/30/2010   1   0920    7:00
00109   6/30/2010   1   0154    7:30
00109   6/30/2010   1   0154    9:00
00109   6/30/2010   1   0154    9:43
00109   6/30/2010   1   0254    10:49
00109   6/30/2010   1   0154    12:30
00109   6/30/2010   1   S       15:00
00111   6/30/2010   1   0591    5:00
00111   6/30/2010   1   S       17:00
00114   6/30/2010   2   0585    15:00
00114   6/30/2010   2   S       23:00

私が書き込もうとしているレポートには、そのような形式の情報が必要です

Empnbr      Datestamp      Shift      Time Start       Time End       Machine

これにより、1日1人あたりの各マシンで費やされた時間を計算できます。基本的に、Accessは従業員番号、日付スタンプ、シフトを確認し、最初に確認する必要があります。次に、次にそれを確認し、その時間を最初のエントリのマシンに帰属させる必要があります。これは、Accessがサインアウトを意味するマシン「S」に遭遇するまで発生し続けます。

今度はこの頭痛のためにいくつかのアドビルを取る時間です-あなたの助けに感謝します!

4

2 に答える 2

0

グループ化クエリが適していない理由はありますか? 例えば:

SELECT Empnbr, Datestamp, Shift, Machnbr, 
       Min(CDate([datestamp] & " " & [Time])) AS TimeStart, 
       Max(CDate([datestamp] & " " & [Time])) AS TimeEnd
FROM MachineLog 
GROUP BY Empnbr, Datestamp, Shift, Machnbr

コメントを編集

多分:

SELECT m.Empnbr, m.Datestamp, m.Shift, m.Machnbr, 
     Nz((SELECT Max(CDate([datestamp] & " " & [Time])) 
         FROM MachineLog x WHERE x.Empnbr=m.Empnbr 
         AND x.Machnbr<m.Machnbr),CDate([datestamp] & " 08:00")) AS st, 
     Max(CDate([datestamp] & " " & [Time])) AS TimeEnd
FROM MachineLog m
GROUP BY m.Empnbr, m.Datestamp, m.Shift, m.Machnbr
于 2010-07-13T10:13:58.650 に答える
0

一時テーブルを使用します。レポートを表示する場合は、VBA コードを使用して入力テーブルを調べ、レポート データを作成し、一時テーブルに入力します。次に、一時テーブルのデータを使用してレポートを表示します。レポート テーブルに入力する関数は次のようになります。

Public Sub BuildReportTable()
    Dim prevEmp As Integer
    Dim prevDate As Date
    Dim prevTime As Date
    Dim prevMachine As String
    Dim prevShift As Integer
    Dim rs As Recordset

    'Empty report table
    CurrentDb.Execute "delete from tblHourReport"

    'Open the data table
    Set rs = CurrentDb.OpenRecordset("tblHours", dbOpenDynaset)
    If Not rs.EOF Then rs.MoveFirst

    'Loop over each data record and create the report record
    prevEmp = 0
    Do While Not rs.EOF
        If prevEmp <> 0 And prevMachine <> "S" Then
            DoCmd.SetWarnings False
            DoCmd.RunSQL "insert into tblHourReport values (" _
                & prevEmp & ", '" _
                & prevDate & "', '" _
                & prevMachine & "', " _
                & prevShift & ", '" _
                & prevTime & "', '" _
                & rs!Time & "');"
            DoCmd.SetWarnings True
        End If
        prevDate = rs!Date
        prevShift = rs!shift
        prevEmp = rs!employee
        prevTime = rs!Time
        prevMachine = rs!machine
        rs.MoveNext
    Loop
End Sub
于 2010-07-13T03:14:13.670 に答える