Microsoft Access 掲示板

クエリを使って条件に当てはまる日付を抽出したい / 2

10 コメント
views
4 フォロー
2

質問内容 1, 2 両方ともに関連することですが
Tくり返し条件 テーブルの
データ構成に問題があるでしょう。

一意のリマインダーIDを構成する要素は
  週番号 + 曜日番号
なのですから
週番号だけ とか、曜日番号だけ という
どちらか1つだけを表現した行を作ってはならないのです。

rookjimさんの例で申し上げるなら
リマインダーID:3 の「 毎週月曜と金曜 」というのは

  ・ 週番号は 1 または 2 または 3 または 4 または 5
 且つ
  ・ 曜日番号は 2 または 6

であるのに
週番号の入力値を 0 という非該当の数字で表現していることが
SQL文が複雑になり、思ったように抽出できない原因になっています。
 
T条件

条件IDリマインダーID曜日番号週番号
1172
2174
3213
4321
5322
6323
7324
8325
9361
10362
11363
12364
13365

 
このように
複数の条件( 週 + 曜日 )を全て網羅するようなデータ構成に変更すると
SQL文は以下のように簡潔に記述できて
抽出漏れも解消できます。

SELECT x.リマインダーID
     , y.日付
     , x.曜日番号
     , x.週番号
FROM T条件 x
   , T日付 y
WHERE x.曜日番号 = Weekday( y.日付 )
  AND x.週番号   = ( Day( y.日付 ) + 6 ) \ 7
ORDER BY y.日付
       , x.リマインダーID ;
通報 ...