Microsoft Access 掲示板

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

10 コメント
views
4 フォロー
6
rookjim 2019/10/27 (日) 22:11:41

mayuさん

大変に熱のこもったご回答をいただきありがとうございます。

ひとまず、中段にご提示いただいた、元のクエリで抽出されないレコードを集計クエリで別途抽出しユニオンクエリで結合するという考え方を参考にさせていただき、
実際の動作を検証してみたいと思います。

また、独学なため実例を見る機会があまりなく、テーブル設計含めより適した方法を引き続き検討していきたいと思いますので、機会がありましたらぜひよろしくお願い致します。以上、ありがとうございました。

通報 ...
  • 7

    > テーブル設計含めより適した方法を引き続き検討していきたいと思いますので、
    > 機会がありましたらぜひよろしくお願い致します。

    テーブルの構造を変更する場合のサンプルを以下に載せておきます。

    まず、リマインダーは

      ・ 日 単位で発生するもの
      ・ それ以外のもの( 週・曜日 )

    の2種に大別できるでしょう。
    ( 両立しない条件のため )

    よって、リマインダの定義テーブルに
    種別を管理するフィールドが必要になります。( ※1 )

    次に、リマインダーの発生周期は
    月、週、曜日、日の組み合わせによることから
    条件テーブルに、これらの値を格納するフィールドが必要 ( ※2 )

    条件テーブルへデータを登録するにあたり、
    行数が増えることに漠然とした不安を感じておられるようなので
    行数を抑制できるフィールド構成にします ( ※3 )

    特定の日に1度きりで実施されるリマインダと
    特定の周期で何度も実施されるリマインダは
    入力項目を共通化して統一し、Nullや意味不明の値は許可しない ( ※4 )

    ※1 ~ ※4 を網羅したテーブル定義

    CREATE TABLE T_リマインダー
    (
          リマインダーID   INT            NOT NULL
        , リマインダー内容 VARCHAR( 100 ) NOT NULL
        , リマインダー種別 SMALLINT       NOT NULL
        , 開始年           SMALLINT       NOT NULL
        , 終了年           SMALLINT       NOT NULL
        , CONSTRAINT pk_reminder PRIMARY KEY ( リマインダーID )
    );
    

     

    CREATE TABLE T_条件
    (
          条件ID          AUTOINCREMENT PRIMARY KEY
        , リマインダーID  INT           NOT NULL
        , 対象月_from     SMALLINT      NOT NULL
        , 対象月_to       SMALLINT      NOT NULL
        , 週番号_from     SMALLINT      NOT NULL
        , 週番号_to       SMALLINT      NOT NULL
        , 曜日番号_from   SMALLINT      NOT NULL
        , 曜日番号_to     SMALLINT      NOT NULL
        , 日番号          SMALLINT      NOT NULL
    );
    

     

    CREATE TABLE T_日付
    (
          日付 DATETIME NOT NULL PRIMARY KEY 
    );