hatena
hatena
2024/06/20 (木) 07:50:35
今回、ご相談させていただきたいのは、開始日は在籍期間NoのMinで良いのですが、
終了日が、理論上は[在籍期間No] + 1のMinの前日となると思っていますが、
私ができる初歩的なレベルですと、もうひとつクエリを作って、両者を結合させるとかになります。
アクションテーブルに失効日のフィールドを追加しておいて、SetRenban関数のループ内で発行日の前日を前レコードの失効日に代入するという処理を追加すればどうでしょう。
Public Sub SetRenban()
Dim rs As DAO.Recordset
Dim c As Long, d As Long
Dim pre氏名, pre組織名
Dim strSQL As String
strSQL = "SELECT 在籍期間No, 終了日, 発令日, 氏名, 組織名 FROM アクションテーブル " & _
"ORDER BY 氏名, 発令日;"
Set rs = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset, dbFailOnError)
Do Until rs.EOF
If pre氏名 = rs!氏名 Then
If pre組織名 <> rs!組織名 Then
c = c + 1
pre組織名 = rs!組織名
End If
d = Format(DateAdd("d", -1, Format(rs!発令日, "0000/00/00")), "yyyymmdd")
rs.MovePrevious
rs.Edit
rs!失効日 = d
rs.Update
rs.MoveNext
Else
c = 1
pre氏名 = rs!氏名
pre組織名 = rs!組織名
End If
rs.Edit
rs(0) = c
rs.Update
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
MsgBox "完了"
End Sub
SELECT t.氏名, t.組織名, Min(t.発令日) AS 開始日, Max(t.終了日) AS 終了日
FROM アクションテーブル As t
GROUP BY t.氏名, t.組織名, t.在籍期間No
ORDER BY t.氏名, t.在籍期間No;
通報 ...