Microsoft Access 掲示板

「開始時刻」と「終了時刻」を同内容であれば集約したい / 6

10 コメント
views
4 フォロー
6
mayu 2020/03/10 (火) 20:37:16 修正 a3615@61ad5

Window 関数は、Oracle や SQLServer など本格的なデータベースには標準で搭載されている機能ですが、
Access には移植されておらず、LAG や LEAD といった関数は、模倣するのが難しいですから
旅人算 」という手段を用いて実現する方法 をご紹介します。

手順1
hatenaさんのコンテンツで紹介されている下記の関数を使いますから
ご自身のデータベースに、モジュール( SetSequenceNumber関数 )をインポートしておいてください。
 

グループ毎連番を自動入力する関数
クエリで連番を表示する場合、DCount関数やサブクエリを利用する方法はあちこちで紹介されています。 しかし、この方法は自分より前のレコード件数をカウントするというロジックなのでレコード件数が多くなると幾何級数的に重くなります。また、グループ毎に連番を振るという仕様になると、条件式も複雑になってきます。 クエリは使わずにテーブルに連番フィールドを持たせて、そこに VBA で連番を書きこむようにすると高速...
fc2

手順2
T_日報マスタ テーブルに 数値型のフィールドを2つ追加します。
追加するフィールドの名前は

    全体連番
    グループ連番

とします。

手順3
追加した2つのフィールドに VBA で連番を振ります。
(
  ※ 全体連番には、日付 + 開始時刻 の昇順で ユニークな番号を付与します。
  ※ グループ連番には 日付・内容 を母集団とし、開始時刻の昇順で 集団内での連番を付与します。
)

Sub set_number()
    Call SetSequenceNumber("全体連番", "T_日報マスタ", , "日付,開始")
    Call SetSequenceNumber("グループ連番", "T_日報マスタ", "日付,内容", "開始")
End Sub

 
■ set_number実行前

ID日付内容開始終了全体連番グループ連番
12020/03/10移動7:00:009:00:00
22020/03/10作業9:00:0010:00:00
32020/03/10作業10:00:0011:00:00
42020/03/10移動15:00:0016:00:00
52020/03/10作業16:00:0018:00:00
62020/03/12作業8:45:0017:00:00
72020/03/13作業8:45:0012:00:00
82020/03/13作業12:00:0017:00:00
92020/03/14移動8:45:0010:00:00
102020/03/14作業10:00:0017:00:00
112020/03/10作業11:00:0012:00:00

 
■ set_number実行後

ID日付内容開始終了全体連番グループ連番
12020/03/10移動7:00:009:00:0011
22020/03/10作業9:00:0010:00:0021
32020/03/10作業10:00:0011:00:0032
42020/03/10移動15:00:0016:00:0052
52020/03/10作業16:00:0018:00:0064
62020/03/12作業8:45:0017:00:0071
72020/03/13作業8:45:0012:00:0081
82020/03/13作業12:00:0017:00:0092
92020/03/14移動8:45:0010:00:00101
102020/03/14作業10:00:0017:00:00111
112020/03/10作業11:00:0012:00:0043
通報 ...