Access 2007 (+VB 2013) で動作させるプログラムを作っています。
[]で囲んだ項目はNot Null制約
tableA
[ID] [Name]
1 大野
2 池田
3 渡邊
…
tableB
[ID] [subID] [ImagePath] ※
1 1 c:\Image001.jpg (日付A)
1 2 c:\Image002.jpg (日付B)
1 3 c:\Image003.jpg (日付C)
3 1 c:\Image031.jpg {Null}
注 tableB に 池田さんのデータは無し
注 (日付A)は仕様上でこの日より前の日付は指定できないこととする。(NULL でできるのであればNULL)
のようなテーブルがあり、 tableA と tableB は IDで外部結合してるとします。
その時、
大野さんのある指定した日付のImagePathを取りたいとします。
(もちろん、最終的には3人とも。人が増えれば全員対象)
それでその日付の対象を
(1) 日付 が 日付A <= 日付 <日付B
(2) 日付 が 日付B <= 日付 <日付C
(3) 日付 が 日付C <= 日付
(4) Null の値がセットされている場合は、日付に関係なく一律
(5) もともとない人に対してはかえってこない
に対するImagePathを取得したいのですが、
※の列を 期間の始点とするべきか終点とするべきかも含めて
良いSQLの組み方を教えていただければと思います。
Access2007という環境が維持できればもっと根本から変えた設計でもかまいません。
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
やりたいことは「名前と日付を指定し、指定した日に表示する画像のパスを得る」ということですよね?
で、項目※については「指定した日付より小さい物のうちの最大値」ということだと思います。これは複問い合わせにMAXを使うことで行けるように思いますがいかがしょう。
あとnullの考慮ですね。日付指定の無い方の場合、項目※にnullを入れておくのか、最小値を入れておくのかのデータ仕様上の判断ですか。
授業の課題なのかお仕事なのかは分かりませんが、SQL化はご自身でお考えください。
INNER JOINを使う方法もあるのかな? どうなのかな?
参考まで。
ヒントありがとうございます。
NULLを仕様上の一番過去 (2000/1/1)として、
TableA の Name 列は 予約語なので Namaeに変えて、
ID = 1 の人 の 2015/12/31 を 渡すときは
SELECT A.ID, B.subID, B.ImagePath, IIF(B.DateFrom = NULL , #1/1/2000# , B.DateFrom)
FROM tableA as A INNER JOIN tableB as B ON A.ID = B.ID
WHERE A.ID = 1 and B.DateFrom = (SELECT max(DateFrom)
FROM tableB
WHERE tableB.DateFrom <= #12/31/2015#) で行けた!
と思ったら TableB の IDによらず、一番未来日を超えると戻らくなってしまいました・・・もうちょっと考えます。
ちなみに、課題でも仕事でもありませんですけどね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- Access(アクセス) accessの日付フィールドから前年度だけを取り出したい 3 2022/04/13 23:13
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- Oracle sqlで質問です。 Aテーブルの情報をBテーブルに更新かけたいです。 やりたいことは、Bテーブルの受 1 2023/05/17 11:17
- Excel(エクセル) セルに特定の色が出た時だけ、式を発動させたい 4 2022/06/17 10:32
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
- SQL Server DBのテーブルの設計ができず困っています。 2 2023/06/29 16:43
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける (再質問) 4 2022/09/14 22:51
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「24日の0時」って・・・
-
日付の大小の表現
-
差し込み印刷に当日の日付が入...
-
「時間」、「期日」、「日付」...
-
ACCESSで日付ごとに自動連番(...
-
パソコンで購入したデーターが...
-
日付以外のデータを抽出したい...
-
ACCESS フォームで入力した日付...
-
履歴書の日付間違いで落ちますか。
-
フォームの値をクエリーに反映...
-
EXCELで日付を****年上期、****...
-
エクセル マクロ 名前を付けて...
-
Excelでヘッダに前日の日付を表...
-
ACCESSで1月1日~12月31日まで...
-
2つの日付の中間の日付 エク...
-
回覧板の日付について質問です...
-
ACCESS 今日の日付のデータ抽出...
-
エクセルVBAでFINDで年...
-
Access DTPickerの初期表示月を...
-
エクセルで日付別にシートを分...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「24日の0時」って・・・
-
パソコンで購入したデーターが...
-
「時間」、「期日」、「日付」...
-
日付の大小の表現
-
差し込み印刷に当日の日付が入...
-
回覧板の日付について質問です...
-
エクセル マクロ 名前を付けて...
-
TODAY関数から次の火曜もしくは...
-
エクセルで日付別にシートを分...
-
Excelについて
-
スプレッドシートで使う数式を...
-
エクセルで日付け表示で、明治...
-
履歴書の日付間違いで落ちますか。
-
Excelでヘッダに前日の日付を表...
-
ACCESSで1月1日~12月31日まで...
-
ACCESSで日付ごとに自動連番(...
-
エクセルで6ヵ月後を自動入力で...
-
2つの日付の中間の日付 エク...
-
差込印刷 縦書きで和暦(漢数...
-
EXCELで日付を****年上期、****...
おすすめ情報