mayu
2019/10/25 (金) 21:31:50
76b28@61ad5
質問内容 1, 2 両方ともに関連することですが
Tくり返し条件 テーブルの
データ構成に問題があるでしょう。
一意のリマインダーIDを構成する要素は
週番号 + 曜日番号
なのですから
週番号だけ とか、曜日番号だけ という
どちらか1つだけを表現した行を作ってはならないのです。
rookjimさんの例で申し上げるなら
リマインダーID:3 の「 毎週月曜と金曜 」というのは
・ 週番号は 1 または 2 または 3 または 4 または 5
且つ
・ 曜日番号は 2 または 6
であるのに
週番号の入力値を 0 という非該当の数字で表現していることが
SQL文が複雑になり、思ったように抽出できない原因になっています。
T条件
条件ID | リマインダーID | 曜日番号 | 週番号 |
---|---|---|---|
1 | 1 | 7 | 2 |
2 | 1 | 7 | 4 |
3 | 2 | 1 | 3 |
4 | 3 | 2 | 1 |
5 | 3 | 2 | 2 |
6 | 3 | 2 | 3 |
7 | 3 | 2 | 4 |
8 | 3 | 2 | 5 |
9 | 3 | 6 | 1 |
10 | 3 | 6 | 2 |
11 | 3 | 6 | 3 |
12 | 3 | 6 | 4 |
13 | 3 | 6 | 5 |
このように
複数の条件( 週 + 曜日 )を全て網羅するようなデータ構成に変更すると
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 ;
通報 ...