• ベストアンサー

アクセスのクエリーについて

今アクセス97を使用しています。 アクセスのクエリーを使って下記のようなことをやりたいのですが 抽出の条件をどうすればいいかわかりません。 わかる方いらっしゃいましたらお願いします。 説明不足ありましたら補足させていただきます。 A:支店名 B:更新日 C:電話番号 1 青森支店 | 2001/5/20 | aaa-aaaa←――支店名ダブっているときはB:更新日が新しいもの抽出 2 青森支店 | 2001/3/20 | bbb-bbbb 3 岩手支店 | 2001/2/30 | ccc-cccc←――支店名ダブっているときはB:更新日が新しいもの抽出 4 岩手支店 | 2001/2/30 | ddd-dddd 5 宮城支店 | 2001/5/20 | eee-eeee←――支店名ダブっないときそのまま ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ A:支店名 B:更新日 C:電話番号 1 青森支店 | 2001/5/20 | aaa-aaaa 3 岩手支店 | 2001/2/30 | ccc-cccc 5 宮城支店 | 2001/5/20 | eee-eeee

質問者が選んだベストアンサー

  • ベストアンサー
  • yoisho
  • ベストアンサー率64% (331/516)
回答No.4

私も以前、同様の処理を簡単に出来ないものかと悩んだことがあります。 結局、一番シンプルなのはyanmaaさんが言われるようにまず以下のようなクエリーをつくり、 SELECT テーブル1.支店名, Max(テーブル1.更新日) AS 更新日の最大 FROM テーブル1 GROUP BY テーブル1.支店名; 次のクエリーで必要なレコードを抽出する方法でしょう。 SELECT テーブル1.支店名, クエリー1.更新日の最大, テーブル1.電話番号 FROM テーブル1 INNER JOIN クエリー1 ON (テーブル1.更新日 = クエリー1.更新日の最大) AND (テーブル1.支店名 = クエリー1.支店名); クエリーをいくつも作りたくないというのなら、サブクエリーを使って、 SELECT テーブル1.支店名, テーブル1.更新日, テーブル1.電話番号 FROM テーブル1 WHERE テーブル1.更新日 = (SELECT MAX(テーブル1_1.更新日) FROM テーブル1 AS テーブル1_1 WHERE テーブル1.支店名 = テーブル1_1.支店名); のようにする方法もあります。 ご質問のそのままのお答えにはなっていませんが、私が実際におこなったのは、元のテーブルに、D:最終データ(True/False型)フィールドを追加して、新規データを入力するたびに、イベントプロシージャで同じ支店の最後の入力レコードのみ、最終データフィールドの値が“True”になるように処理をしてやり、レコードの抽出を単純に以下のクエリーで行う方法でした。 SELECT テーブル1.支店名, テーブル1.更新日, テーブル1.電話番号 FROM テーブル1 WHERE テーブル1.最終データ = True; 私の場合、業務でレコードの抽出を頻繁に行うことから、データのサイズよりパフォーマンスを重視し、クエリーをシンプルにするためにテーブルの方に細工をしました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • yanmaa
  • ベストアンサー率45% (207/457)
回答No.3

ええと先にかかれているお二人の回答には不備が有ります。 ついでに質問にも まず質問は ・3,4レコード目が同一支店で同じ日付になっている事 ・2月30日という存在しない日である事 訂正として 3レコード目の日付を3月30日とします。 4レコード目の日付を2月28日とします。 この時No1、2の場合電話番号が最大か最小になる為一致しなくなります。 1 青森支店 | 2001/5/20 | aaa-aaaa 2 青森支店 | 2001/3/20 | bbb-bbbb を例に取ると更新日をMAX取るのは問題有りません。これは大きい方が最新ですから ただし、電話番号の場合、MINならばaaa-aaaaを抽出するし、MAXならbbb-bbbbを抽出します。 よって欲しい結果である 1 青森支店 | 2001/5/20 | aaa-aaaa を出せる保証が有りません。 簡単な方法としては クエリー1で支店名と更新日の一覧を作成する。 この時グループ化を行い、支店名はグループ化、更新日は最大を取るようなクエリーを作成します。 このクエリー1と支店名が入っているテーブルとで支店名と更新日で結合させて抽出すればお望みのものが表示されると思います。

全文を見る
すると、全ての回答が全文表示されます。
  • hysteric5
  • ベストアンサー率28% (4/14)
回答No.2

支店名をキーとしてグルーピングをしてやれば問題ないと思います。 Sql文の例を掲載しておきます。 SELECT 支店名, Min(更新日), Min(電話番号) FROM Tab GROUP BY 支店名; Minは更新日の中で一番、小さい物を表示すると言う意味です。 更新日で新しいものを表示したいのであればMaxで良いと思います。 デザインビューでクエリを編集する場合は デザインビューを開き フィールドとかテーブルとかって書いてある所で 右クリックをし集計を選択します。 そして支店名のみ新たに出来た集計って所をグループに設定し 他のところは一番、大きい値を表示したい場合は最大、 小さい値の場合は最小、先頭のものを表示したいのであれば先頭 と言う具合に指定してやれば問題ないと思います。

全文を見る
すると、全ての回答が全文表示されます。
  • taranko
  • ベストアンサー率21% (516/2403)
回答No.1

クエリーの中で集計の表示を出して 支店名でグループ化し、更新日は最大値とし、電話番号は最大値か 最小値にしたらいかがでしょう。 あと、並べ替えで支店名で降順か昇順に並べ替えてください。 いかがでしょうか。

masa2000z28
質問者

お礼

お礼遅くなり申し訳ございません。 回答ありがとうございます。 おかげで目的どおり作成することができました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • CREATE VIEWについて

    2つのテーブル(basecodeとaddcode)からVIEWを作りたいのですが、 そのVIEWについてご教授いただきたく。 <TABLE名:basecode> ---------------------- no name area code ---------------------- 1 aaaa 2 102 2 bbbb 4 103 3 cccc 4 203 4 gggg 3 303 5 eeee 3 101 6 ffff 5 104 7 hhhh 1 115 ---------------------- <TABLE名:addcode> ----------------------------------------- base anum bnum cnum dnum dmy no ----------------------------------------- bbbb 1 1 1 1 aaa 2 cccc 12 13 10 2 aaa 3 cccc 12 13 10 0 aaa 3 cccc 12 13 10 5 aaa 3 dddd 12 15 3 1 aaa 3 dddd 12 15 3 3 aaa 3 dddd 12 15 3 4 aaa 3 eeee 10 3 12 1 aaa 5 eeee 10 3 12 2 aaa 5 eeee 10 3 12 3 aaa 5 eeee 10 3 12 4 aaa 5 eeee 13 12 15 3 aaa 5 eeee 13 12 15 0 aaa 5 eeee 13 12 15 1 aaa 5 eeee 13 12 15 2 aaa 5 hhhh 4 3 11 0 aaa 7 hhhh 4 3 11 2 aaa 7 hhhh 4 3 13 2 aaa 7 kkkk 0 0 0 0 aaa 9 ----------------------------------------- VIEWの抽出は以下の通り。  basecodeのno  basecodeのname  basecodeのcode  addcodeのbase  addcodeのanum  addcodeのbnum  addcodeのcnum  addcodeのdnum VIEWの作成条件としては以下の通り。 <条件> TABLE名:basecodeとaddcodeのnoが存在し、かつ、 baseaddのnoが複数あり、baseが同じものは以下で判断  ・anumとbnumとcnumが同一であればその中のdnumが最小であるレコードを抽出  ・anumとbnumとcnumが異なれば別々に抽出 上記より、以下のように抽出したい。 <TABLE名:basecodeview> ----------------------------------------------- no name code base anum bnum cnum dnum ----------------------------------------------- 2 bbbb 103 bbbb 1 1 1 1 3 cccc 203 cccc 12 13 10 0 3 cccc 203 dddd 12 15 3 1 5 eeee 101 eeee 10 3 12 1 5 eeee 101 eeee 13 12 15 0 7 hhhh 115 hhhh 4 3 11 0 7 hhhh 115 hhhh 4 3 13 2 ----------------------------------------------- よろしくお願いします。

  • access で 方法を教えてください。

    access で 方法を教えてください。 テーブルは セミコロン区切りで、区切られて表示されています (テーブル例)  1 aaaa;bbbb;cccc;dddd;eeee;ffff 2000byte 2 aaaa 300byte 3 bbbb;cccc;ffff 3000byte 4 ffff;dddd 120byte このセミコロン区切りの区切られたデータの 「件数」と「バイト」を表で表示させる方法を教えて欲しいのです。 上記テーブル例を使用しての(抽出例)  抽出条件    ↓   aaaa 2件 2500byte   bbbb 2件 5000byte  cccc 2件 5000byte   dddd 2件 2120byte   eeee 1件 2000byte   ffff 3件 5120byte 宜しくお願いします。

  • Perl言語でファイル入出力プログラムについて

    Perlでファイル入出力のプログラムをコーディングしたいのですが、いまいちハッシュが理解しずらく困っています。わかる方よろしくお願いします。 moto.pl の中にあらかじめ AAA aaa AaAa AAaa BBB bbb BbBb BBbb CCC ccc CcCc CCcc AAA aaa AaAa AAaa .... というように一行ずつ文字列があり、この場合では最初の大文字AAAが二つあるので、その結果を例えばsaki.plに AAA 2 ... というように出力するプログラムを教えて頂けませんか?

    • ベストアンサー
    • Perl
  • [Excel]重複データの一方のセルが持つ値を一方の空白セルに反映させたい

    A列にある7000件ほどのデータの中から重複データのみを抽出し、 重複データの一方がB列に持つ値を、もう一方のデータのB列の空白セルに反映させたいのですが、方法はありますでしょうか? 「COUNTIF」を使って重複データの抽出はできますが、一方が持つデータをもう一方の空白に反映させることができません。 手作業では期限に間に合わない可能性がみえて焦っております。 恐縮ですがご教授いただけますでしょうか。 (例) [処理前] A列:B列:C列 1111:AAAA:aaaa 2222:BBBB:bbbb 3333:CCCC:cccc 1111:    :dddd 2222:    :eeee [処理後] A列:B列 1111:AAAA:aaaa 1111:AAAA:dddd 2222:BBBB:bbbb 2222:BBBB:eeee

  • Excelシートの統合するマクロなどがありましたらお教えください。

    各支店(約200)からExcelシートで送信されてくる報告内容を別のシートに一気にまとめるマクロ等はないでしょうか?ご存知の方よろしくお願いします。 (例) A支店  項目  aaa    bbb    ccc    ddd    eee        10    20     30    0     0         8    8      0     0      0               以下約300件 B支店  項目  aaa    bbb    ccc    ddd    eee        11    22     33    0     0         9    9      0     0      0               以下約300件      別シートに 項目  aaa    bbb    ccc    ddd    eee        10    20     30    0     0         8    8      0     0      0        11    22     33    0     0         9    9      0     0      0                   以下省略           よろしくお願いします       

  • 重複クエリについて

    アクセスの重複クエリで、キーにしたものを基準に 重複データを抽出することはできるのですが、 1 AAA あか 東京 100 AAA あか 神奈川 101 BBB あお 埼玉 110 CCC きいろ 青森 上記のようなデータがあるとします。 オートナンバーを使用しているのですが、色をキーにしてかつ オートナンバーで小さいほうをみて表示させることは できないのでしょうか。 下記のような感じで.. 1 AAA あか 東京 101 BBB あお 埼玉 110 CCC きいろ 青森

  • SQLについて

    aaa bbb ccc ddd eee ggg hhh ---------------------------------------------- 111 111 111 111 111 111 111 112 112 112 112 112 112 111 112 113 113 113 113 113 111 114 114 114 114 114 114 111 114 114 114 114 114 114 112 114 115 115 114 114 115 111 114 115 115 114 114 115 112 116 116 116 116 116 116 111 116 116 116 116 116 116 112 116 116 116 116 116 117 111 116 116 116 116 116 117 112 118 118 118 118 118 118 118 上記のようなデータより、SQLのSELECTを使用して、以下のように抽出したいです。 抽出条件は以下が全て満たしているものとなります。 ・aaa,ccc,ddd,eee,gggが重複、hhhが小さいもの ・bbbが異なるもの aaa bbb ccc ddd eee ggg hhh ---------------------------------------------- 112 112 112 112 112 112 111 ・・・(1) 112 113 113 113 113 113 111 ・・・(1) 114 114 114 114 114 114 111 ・・・(2) 114 115 114 114 114 115 111 ・・・(2) (1)はaaa,ccc,ddd,eee,gggが重複、bbbが異なるため抽出対象 (2)はaaa,ccc,ddd,eee,gggが重複、bbbが異なるため抽出対象  また、hhhが小さいもの 以上、よろしくお願いします。

  • 列の内容が変わるごとに連番をふりたい。

    すみません。どうしたらいいのかわからず、困っています。 このようなことは、可能でしょうか? 列Aに伝票NO、列Bに会社名、列Cに現場名があり、列Dに商品名が記入されています。 会社名と現場名が変わるごとに連番(伝票NO)を振ることはできないでしょうか? また、同じ会社同じ現場で5行を超えると一つNOが増えるようには、できないでしょうか? 出来上がりの感じは、このようになりたいのですが・・・ ご教授お願いいたします。 伝票NO    会社名    現場名    商品名 1001     A事務機   本社     aaaa 1001     A事務機   本社     bbbb 1001     A事務機   本社     cccc 1002     B商店    あ支店    aaaa 1002     B商店    あ支店    cccc    1003     C電機    い事務所  aaaa 1004     A商会    倉庫     aaaa 1004     A商会     倉庫     bbbb 1004     A商会    倉庫     cccc 1004     A商会    倉庫     dddd 1004     A商会    倉庫     eeee 1005     A商会    倉庫     ffff 1005     A商会    倉庫     gggg

  • 各NO内で、最大値を抽出するSELECT文がわかりません。

    あるテーブル[SAMPLE]があります。 キーは、<NO>と<版数>です。データ内容は、 以下の通りです。 <NO><版数><名前>  1  1   AAAA  1  2   BBBB  1  3   CCCC  2  1   DDDD  2  2   EEEE このテーブルから、各NOで、版数が最大のものを抽出したいのです。 抽出後 → <NO><版数><名前>        1  3   CCCC        2  2   EEEE どのようなSELECT文になるのでしょうか? 教えてください。お願いします。   

  • PHP 多次元配列のソート

    $array = array( array("address" =>"eeee@dddd.ddd","name" => "あいう"), array("name" => "はざま","address" => "cccc@dddd.ddd"), array("name" => "かきく","address" => "tttt@ccc.eee"), array("name" => "さく","address" => "bbbb@dddd.ddd"), array("name" => "あか","address" => "aaaa@dddd.ddd") ); 上記のような多次元配列があった場合 sort($array); とすると 以下のようなデフォルトの配置が Array ( [0] => Array ( [address] => eeee@dddd.ddd [name] => あいう ) [1] => Array ( [name] => はざま [address] => cccc@dddd.ddd ) [2] => Array ( [name] => かきく [address] => tttt@ccc.eee ) [3] => Array ( [name] => さく [address] => bbbb@dddd.ddd ) [4] => Array ( [name] => あか [address] => aaaa@dddd.ddd ) ) 上記の並びが Array ( [0] => Array ( [address] => eeee@dddd.ddd [name] => あいう ) [1] => Array ( [name] => あか [address] => aaaa@dddd.ddd ) [2] => Array ( [name] => かきく [address] => tttt@ccc.eee ) [3] => Array ( [name] => さく [address] => bbbb@dddd.ddd ) [4] => Array ( [name] => はざま [address] => cccc@dddd.ddd ) ) nameキーの値をもとにあいうえお順にならびかえられます。 がこれをnameキーではなく addressキーで並び替えたいと思ったとき、 usort($array , function($a,$b){ if($a["address"]< $b["address"]){ return -1; }else{ return 1; } } ); と上記のようのおこなうと Array ( [0] => Array ( [name] => あか [address] => aaaa@dddd.ddd ) [1] => Array ( [name] => さく [address] => bbbb@dddd.ddd ) [2] => Array ( [name] => はざま [address] => cccc@dddd.ddd ) [3] => Array ( [address] => eeee@dddd.ddd [name] => あいう ) [4] => Array ( [name] => かきく [address] => tttt@ccc.eee ) ) とうまくaddressキーでabcdの順にソートできています。 次に usort($array , function($a,$b){ return strcmp($a["address"],$b["address"])? -1:1; } ); と上記のようにstrcmp関数を使うと Array ( [0] => Array ( [name] => あか [address] => aaaa@dddd.ddd ) [1] => Array ( [name] => さく [address] => bbbb@dddd.ddd ) [2] => Array ( [name] => かきく [address] => tttt@ccc.eee ) [3] => Array ( [name] => はざま [address] => cccc@dddd.ddd ) [4] => Array ( [address] => eeee@dddd.ddd [name] => あいう ) ) うまくソートできませんでした。 この、直接 $a, $bの大小を条件とした場合と strcmp — バイナリセーフな文字列比較をおこなうstrcmp とは、どのような処理の違いがあるのでしょうか?

    • ベストアンサー
    • PHP
このQ&Aのポイント
  • アウトルックのアカウントを変更したところ、メールが送受信できなくなりました。
  • また、受信先のフォルダが消えてしまいました。
  • ひかりTVのサービスやISPぷららについての質問です。
回答を見る

専門家に質問してみよう