Dmax関数で他のテーブル条件を加えてクエリに入れ込む。美容室向け顧客管理システム 開発日記10日目

2020/03/24

MSAccessでアプリづくり。今日はお客様一覧に最終来店日をつけてみました。

「MST_お客様」テーブルに最終来店日の項目をつくってはいたのですが、お客様一覧に表示させるだけなら、ついでにクエリで最新の売上日を出せばよいだけかも?ということで、クエリをいじりました。

このお客様一覧は、「Q_お客様一覧」というクエリで「MST_お客様」というテーブルを整理して表示させているだけです。一方、最終来店日は「DAT_売上」のテーブルから計算します。つまりテーブルを横断します。

そこで作ったクエリですが、上部にはお客様と担当者のテーブルはありますが、売上に関するテーブルが表示されていません。

ポイントはクエリの左から三番目でつかっているDmax関数です。

最終来店日: DMax("売上日","DAT_売上","お客様ID = " & [お客様ID])

とてもシンプルな関数ですが、2番目の項目に""でくくっているのはテーブル名です。意味は以下のような内容になります。

「"DAT_売上"テーブルの、"売上日"項目の最大値(日付も見かけは/区切りですが、実際には大きな桁の数字で管理されているので数字です)を表示させる。その際の条件は"DAT_売上テーブル内のお客様ID項目 =  このクエリで使われている「お客様ID」"と一致するもの」

とりあえずこれだけでほかのテーブルから、今のクエリで使っている項目を条件にして最大値である日付、つまり最終来店日を表示させることができます。

弱点は今日お客様が来店した際に今日の日付を出してしまうとか、予約はしたけれども実際には来店しなかったとか・・・。そういう場合にも日付を表示してしまいます。

「DAT_売上」テーブルにはNoShowのフラグを作っているので、そのうちこちらを組み合わせてNoShow(来店しなかった)を除外する工夫も作りこもうとおおもいますが、今日のところはここまで。