Window 関数は、Oracle や SQLServer など本格的なデータベースには標準で搭載されている機能ですが、
Access には移植されておらず、LAG や LEAD といった関数は、模倣するのが難しいですから
「 旅人算 」という手段を用いて実現する方法 をご紹介します。
【 手順1 】
hatenaさんのコンテンツで紹介されている下記の関数を使いますから
ご自身のデータベースに、モジュール( SetSequenceNumber関数 )をインポートしておいてください。
【 手順2 】
T_日報マスタ テーブルに 数値型のフィールドを2つ追加します。
追加するフィールドの名前は
全体連番
グループ連番
とします。
【 手順3 】
追加した2つのフィールドに VBA で連番を振ります。
(
※ 全体連番には、日付 + 開始時刻 の昇順で ユニークな番号を付与します。
※ グループ連番には 日付・内容 を母集団とし、開始時刻の昇順で 集団内での連番を付与します。
)
Sub set_number()
Call SetSequenceNumber("全体連番", "T_日報マスタ", , "日付,開始")
Call SetSequenceNumber("グループ連番", "T_日報マスタ", "日付,内容", "開始")
End Sub
■ set_number実行前
ID | 日付 | 内容 | 開始 | 終了 | 全体連番 | グループ連番 |
---|---|---|---|---|---|---|
1 | 2020/03/10 | 移動 | 7:00:00 | 9:00:00 | ||
2 | 2020/03/10 | 作業 | 9:00:00 | 10:00:00 | ||
3 | 2020/03/10 | 作業 | 10:00:00 | 11:00:00 | ||
4 | 2020/03/10 | 移動 | 15:00:00 | 16:00:00 | ||
5 | 2020/03/10 | 作業 | 16:00:00 | 18:00:00 | ||
6 | 2020/03/12 | 作業 | 8:45:00 | 17:00:00 | ||
7 | 2020/03/13 | 作業 | 8:45:00 | 12:00:00 | ||
8 | 2020/03/13 | 作業 | 12:00:00 | 17:00:00 | ||
9 | 2020/03/14 | 移動 | 8:45:00 | 10:00:00 | ||
10 | 2020/03/14 | 作業 | 10:00:00 | 17:00:00 | ||
11 | 2020/03/10 | 作業 | 11:00:00 | 12:00:00 |
■ set_number実行後
ID | 日付 | 内容 | 開始 | 終了 | 全体連番 | グループ連番 |
---|---|---|---|---|---|---|
1 | 2020/03/10 | 移動 | 7:00:00 | 9:00:00 | 1 | 1 |
2 | 2020/03/10 | 作業 | 9:00:00 | 10:00:00 | 2 | 1 |
3 | 2020/03/10 | 作業 | 10:00:00 | 11:00:00 | 3 | 2 |
4 | 2020/03/10 | 移動 | 15:00:00 | 16:00:00 | 5 | 2 |
5 | 2020/03/10 | 作業 | 16:00:00 | 18:00:00 | 6 | 4 |
6 | 2020/03/12 | 作業 | 8:45:00 | 17:00:00 | 7 | 1 |
7 | 2020/03/13 | 作業 | 8:45:00 | 12:00:00 | 8 | 1 |
8 | 2020/03/13 | 作業 | 12:00:00 | 17:00:00 | 9 | 2 |
9 | 2020/03/14 | 移動 | 8:45:00 | 10:00:00 | 10 | 1 |
10 | 2020/03/14 | 作業 | 10:00:00 | 17:00:00 | 11 | 1 |
11 | 2020/03/10 | 作業 | 11:00:00 | 12:00:00 | 4 | 3 |
通報 ...
凍結されています。