「Web出版サイト」ベータ公開

Q&A集[?]

当サイトでのご質問の受付は終了しました

すべてのコンテンツを読み込み専用としたため、回答欄からも投稿できません

Apache OpenOffice/LibreOfficeのご質問はそれぞれのフォーラムへご投稿ください

質問コーナー

サイト内検索

分類メニュー

関連サイト


本日:1
昨日:1
総数:2560
現在:3


クエリでの最新データの抽出について

ページOpenOffice.org FAQの登録ページ
投稿者urudakara
分類
edit/refer
優先順位
edit/refer
状態
edit/refer
カテゴリー
edit/refer
投稿日2011-07-10 05:22:48 (日)
OSLinux (ubuntu 10.04)
依存するページ
バージョン
edit/refer

メッセージ

回答ページでは行末に「~」を付加する必要はありません

こんにちはいつもお世話になっています。

今回はクエリによる最新データの抽出について質問します。

サンプルをアップロードしているので確認してみてください。

今回はサンプルのテーブル「発行データ」のから発行回数が最大のレコードを、クエリで抜き出したいと思っています。

サンプルの例だと

具体的には  

識別番号  発行回数  発行日
 1            3          H23.04.04
 2            2          H23.02.05
 3            4          H23.01.22

と言うような結果になるクエリが出来ればと思ってます。

それではよろしくお願い致します。


正しいのか分かりませんが…

ike@九州 (2011-07-10 08:52:15 (日))

以下で一応は可能でした。

SELECT "識別番号", "発行回数", "発行日" 
FROM "発行データ" , ( SELECT "識別番号" AS "識別番号G", MAX( "発行回数" ) AS "発行回数M" FROM "発行データ" GROUP BY "識別番号" ) 
WHERE "識別番号" = "識別番号G" AND "発行回数" = "発行回数M" 
ORDER BY "識別番号" ;

2回に分けるとわかりやすい

M.Kamataki (2011-07-11 22:54:06 (月))

集計関数は「GROUP BY」句でまとめたフィールドを対象に計算します。また、集計関数を設定できるのは1フィールドだけなので、ike@九州さんのSQLのように2つのSELECT文をネストさせるか、クエリーとテーブルのリレーションで実現するしかないと思います。

クエリーを使う方法は、まず、「識別番号」フィールドでグループ化して「発行回数」フィールドの最大値を求めるクエリーを作成します。このクエリーと「発行データ」テーブルをリレーションすると、ike@九州さんの結果と同じになります。

一応、サンプルファイルを添付します。

filefaq6_264sample1.odb

やってみます。

urudakara (2011-07-13 11:22:18 (水))

こんにちはike@九州さん、Kamatakiさん
丁度ike@九州さんに提示していただいた解決方法を自分のデータベースに応用していて上手く行かずにもう一度質問を投稿しようとしていた所でしたが、
Kamatakiさんのヒントで何か出来そうな気がしてきました。
もう少し時間をいただいて試してみます。

ですので今しばらく回答中のままでお願いします。

うまく出来なくて・・・

urudakara (2011-07-17 22:48:20 (日))

いつもお世話になってます。

前回にサンプルを挙げて頂いたのですが、自分でやるとなかなか上手く出来ません・・・。
自分が応用しようとしているファイルのデータがついたサンプルを挙げますので、もう少し教えてください。
よろしくお願いします。

うまくできない点は?

M.Kamataki (2011-07-18 10:24:59 (月))

コメントからはうまくできないという点がよくわかりません。作成したクエリーでエラーが出て実行できないのでしょうか。それともクエリーは作成できるものの期待した結果にならないのでしょうか。

例えば、以下の図のようなクエリーではエラーにもなりませんし、期待した結果も得られていると思います。

faq6_264_01.png

サンプルファイルを添付します。

filefaq6_264sample3.odb

出来ましたたん

urudakara (2011-07-22 10:40:22 (金))

こんにちはkamatakiさん ike@九州さん。

kamatakiさんの指摘通り出来ました。
ここにアップするためデータベースのfrom句の後に来る部分を単純にしたサンプルをあげました。それをそのまま使用していたのでエラーが出ていました。

SQL文の文法からわからないのを、一部を「こうじゃないのかなあ・・・」と言う具合に買えていたのですが、
一度キチンと勉強することが大事だと思い色々調べていたため返答が遅くなりました。すみません。

また気づかされたのが、デザイン画面からも同様な物が作れるということ。
結合線が1本しかないクエリしか見たことがありませんでしたから目から鱗でした。
kamatakiさんのSQL文からクエリを作ってそれを編集メニューからデザイン画面を見て、
同様に自分で新規にウィザードを使用してクエリを作ってみた所同様な事が出来ました。感心しました。
ちょっと疑問に思ったのですが、すべてのSQL文はウィザードを使用して作れるのでしょうか?
それとも複雑なものはSQL文を直接書かないとダメなのでしょうか?

もしよかったらその辺を知っている方がいたら教えてください。

ウィザードでもできますが

M.Kamataki (2011-07-23 16:23:57 (土))

「ウィザードを使用して」というのは、Baseの[クエリー]-[ウィザードを使用してクエリーを作成]メニューを利用して、ということでしょうか。こちらでは[クエリー]-[デザイン表示でクエリーを作成]のすべてのクエリーは作成できません。主に利用するのは、1つのテーブルに対して条件を与えてレコードを抽出したり、集計用のクエリーを作成する機能しかありません。2つ以上のテーブルによるリレーションには対応していないので、万能じゃないです。

なお、SQL文は上に挿入したクエリーのデザイン表示の図の赤枠で囲ったボタン[デザインビューのオン/オフ切り換え]で切り換えられます。クエリーデザイン上のリレーションがどのようなSQL文に書き換わるか、参考になると思います。

また、UNIONクエリーなど、SQL文を直接書かないといけないものは存在します。この直接書かないといけないものの判断は、SQLの解説書どおりに入力したにもかかわらずエラーになる場合に試してください。当Q&AではそのようなSQL文はだいたい洗い出しはできているはずです。

やってみます

urudakara (2011-07-25 05:21:24 (月))

こんにちはkamatakiさん
自分でデザイン画面で複雑な物を作りそれをSQLで確認して見てみます。
UNIONクエリーは知らないものですね・・・。
頑張ってみます。

いつも丁寧な回答ありがとうございました。
これで終了とさせていただきます。

お名前:
題名:


添付ファイル: filefaq6_264_01.png 524件 [詳細] filefaq6_264sample3.odb 880件 [詳細] filefaq6_264sample2.odb 442件 [詳細] filefaq6_264sample1.odb 998件 [詳細] filesample.odb 525件 [詳細]