
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
差し込み印刷に当日の日付が入...
-
「時間」、「期日」、「日付」...
-
「24日の0時」って・・・
-
エクセル マクロ 名前を付けて...
-
日付の大小の表現
-
エクセル 日付順に並べてかえた...
-
エクセルで日付け表示で、明治...
-
EXCELで日付を****年上期、****...
-
会社や役所などに提出する書類...
-
エクセルで日付別にシートを分...
-
回覧板の日付について質問です...
-
マクロボタンを押すと、ファイ...
-
フォームの値をクエリーに反映...
-
日付以外のデータを抽出したい...
-
Excelについて
-
メールの最後に日付をいれますか?
-
ACCESSで日付ごとに自動連番(...
-
「3~4日」「3、4日」どう発...
-
Array関数のネスト
-
Excelでヘッダに前日の日付を表...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マクロボタンを押すと、ファイ...
-
日付の大小の表現
-
「24日の0時」って・・・
-
差し込み印刷に当日の日付が入...
-
「時間」、「期日」、「日付」...
-
エクセル 日付順に並べてかえた...
-
回覧板の日付について質問です...
-
エクセル マクロ 名前を付けて...
-
エクセルで日付別にシートを分...
-
会社や役所などに提出する書類...
-
Excelについて
-
EXCELで日付を****年上期、****...
-
履歴書の日付間違いで落ちますか。
-
フォームの値をクエリーに反映...
-
日付以外のデータを抽出したい...
-
差込印刷 縦書きで和暦(漢数...
-
エクセルで日付け表示で、明治...
-
Excel関数 基準日に一番近い指...
-
Excelでヘッダに前日の日付を表...
-
ACCESSで日付ごとに自動連番(...
おすすめ情報