• 締切済み

maxについて

SELECT A.DATA1,A.DATA3 FROM DATABASE A, (SELECT MAX(DATA1) AS DATA1,DATA2 FROM DATABASE GROUP BY DATA2) B WHERE A.DATA1 = B.DATA1 AND A.DATA2 = B.DATA2 DATA2でグループ化した最大のDATA1と同行のDATA3を取得する際に、 上記のように記述しています。 もっと簡単に取得する方法はあるでしょうか?

  • Oracle
  • 回答数1
  • ありがとう数3

みんなの回答

回答No.1

分析関数を使えるバージョンですか?

agi000
質問者

補足

回答ありがとうございます。 Oracleは8iなので、使えると思います。 分析関数の知識が無いので、調べて見ます。

関連するQ&A

  • Oracle 10.2.0 でMAX集計がおかしい!?

    VB6 で oo4o を使って Oracle DB開発をしています。 Oralce 8.1.6 から Oracle10.2.0 にサーバを切り替えました。 bというテーブルがあって、 a c d ---- ------ ----- 10 2 1 20 3 1 30 4 1 40 5 1 50 6 2 というデータがあったとします。 Select MAX(a) as a from b WHERE d=1 のようなSQLをVBから発行したときに SQL*PLUSでは、 a ---- 40 という結果が返ってくるのですが、VBでは、 a --- 10 20 30 40 のように複数行のレコードセットが帰ってきます。そのため、最大行を取得できません。Oracle8 のときは、SQL*PLUSと同じ結果が返ってきていました。ちなみに Select MAX(a) as a from b WHERE d=1 GROUP BY d ~~~~~~~~~~ と、GROUP BYを付けると、ただしい(SQL_PLUSと同じ値)値が取得できます。 Oracle10.2.0の問題か、oo4oの問題かと考えています。 ちなみにoo4oのオブジェクトは、 CreateObject("OracleInProcServer.XOraSession") で作成していて、クライアントのバージョンは 9.2.0.4.4です。 長文で失礼しますが、どなたかSQLを変更せずに解決する方法をご存じないでしょうか?

  • MAX関数と範囲指定

    AのデータをBにコピーをしたいのですが、AからBにうつすときはその日の一番新しいものだけにしたいのです。 例えば、昨日と一昨日のデータの一番新しいやつをコピーしたいのです。今日のデータが入っているので単純にMAXで取り出せないのです。 INSERT INTO B (DATE,NAME,ID) SELECT (DATE,NAME,ID,更新日時) FROM B WHERE DATE = (SELECT MAX(DATE) FROM A WHERE DATE BETWEEN 一昨日 AND 昨日); 根本的に違っているんでしょうか

  • 速度向上。

    速度向上。 Select A,B,C, (Select Count(*) FROM T_A WHERE SOME_ID = A.SOME_ID ) COUNTER , (Select MAX(REGISTER_TIME)FROM T_A WHERE SOME_ID = A.SOME_ID)MAX_REG_TIME FROM T_A as A WHERE ID LIKE '%1%' GROUP BY ID ORDER BY MAX_REG_TIME; テーブルT_AからIDに1が含まれるデータを全て抽出し、かつそれぞれのカウントを抽出し、かつ最新更新日でソートしたいと思います。 データ数が2000程度のテーブルで30秒ほどの時間がかかります。 より速くする良い方法はありますでしょうか?

    • ベストアンサー
    • MySQL
  • サブクエリ:各カテゴリ内で最大の番号を持っている

    各カテゴリ内で最大の番号を持っているものの詳細を表示したいと思っていますが、以下のクエリではエラーがでてしまいます。 SELECT * FROM favorite WHERE no = (SELECT max(no) AS max_no FROM favorite GROUP BY category) 何が悪いのでしょうか?ぜひアドバイスをお願いします。

    • ベストアンサー
    • MySQL
  • MAX(都道府県名)

    Select Customers.PrefecturalID ,MAX(Prefecturals.PrefecturalName) AS 都道府県名 ,Count(*) As 顧客数 From Customers Join Prefecturals On Customers.PrefecturalID = Prifecturals.PrefecturalID Group By Customers.PrefecturalID ; 都道府県名にMAX関数を使っているのですが、MAX関数は最大値を求めるものですが、都道府県名にMAXを使って何をしているのですか? 都道府県IDをグループ化して、都道府県名は同じなので、一つ都道府県名を表示するということですか?一つ間違えていたら、都道府県名が多いものを表示するので、間違いは表示されないということですか?

  • 最新の支払い金額と支払い回数を表示したい。

    以下のテーブルで、それぞれの人の最新の支払い金額とそれぞれの人の支払い回数を求めようと考えてます。 最新の支払い金額、それぞれの支払い回数、と別々には取得できるのですが、一度で取得するSQLは、どう書けばいいのでしょうか? よろしくお願いします。 -テーブル name | amount | created_on A | 340 | 2005/12/01 A | 220 | 2006/05/13 A | 820 | 2008/12/22 B | 400 | 2007/02/13 C | 290 | 2008/12/09 B | 900 | 2009/04/09 -期待する実行結果 name | created_on | times A | 2008/12/22 | 3 | B | 2009/04/09 | 2 | C | 2008/12/09 | 1 | -最新の支払い金額を求める SELECT A.name, A.created_on FROM table AS A WHERE A.created_on = ( SELECT MAX( created_on ) FROM table AS B WHERE A.name = B.name ) ORDER BY A.id -それぞれの支払い回数を求める。 SELECT name, COUNT(*) AS times FROM table GROUP BY name

    • ベストアンサー
    • MySQL
  • グループ毎の条件抽出

    はじめまして。よろしくお願いします。 今、以下のようなデータで以下の抽出条件でデータ取得行いたいと思っています。 ■ TABLEA NO 1~n 識別 A~Z 状況 1~4(null有り) 日付 YYYY/MM/DD 1.識別毎にグループ分けをしたい。 2.「1.」の中で状況が最大値の物のみ抽出 3.「2.」の中で日付が最大値の物のみ抽出 4.識別が無いものは各行出力 5.「1.~3.」の中で抽出されたデータのTABLEAのカラムを全て取得 今は以下のようなSQLで実現させようとしておりますが、 インラインビューを何度もネストしている為あまりパフォーマンスが 良くないです。もっと効率的なSQLが在れば教えていたければと思います。 SELECT /* 4.対象TABLEAのデータを取得 */ * FROM TABLEA, /* 2.グループの中で日付日付の最大値を求める */ (SELECT MAX(TABLEA.日付) AS 最新日付, TABLEA.状況 TABLEA.識別 FROM TABLEA, /* 1.識別毎に状況の最大値を求めるグループ */ ( SELECT MAX(状況) AS 状況最大値, 識別 FROM TABLEA WHERE 識別 IS NOT NULL GROUP BY 識別 )TMP WHERE TABLEA.識別 = TMP.識別 TABLEA.状況 = TMP.状況最大値 )TMP2 TABLEA.日付 = TMP2.最新日付 TABLEA.状況 = TMP2.状況 TABLEA.識別 = TMP2.識別 /* 3.識別は無いものを取得 */ UNION SELECT * FROM TABLEA WHERE 識別 IS NULL 以上です。よろしくお願いします。

  • フィールドの項目ごとの集計値を取得したい

    3フィールド以上からなる zaikoテーブルに商品情報を登録しています。 このshohinフィールドのshohin ごとにkazu を取りだしたいのですが、   SELECT shohin, COUNT(*) AS kazu FROM zaiko GROUP BY shohin; は +--------+------+ | shohin | kazu | +--------+------+ | A | 1 | | B | 3 | | C | 5 | | D | 7 | +--------+------+ と出ます。   SELECT COUNT(*) AS kazu FROM zaiko GROUP BY shohin; もデータが返りますが、A商品だけを取り出そうと   SELECT COUNT(*) AS kazu FROM zaiko GROUP BY shohin WHERE shohin='A'; とすると、ERROR 1064 (42000): が出てしまいます。 Aだけを取り出すsql 文はどのように書けばよいでしょうか?

    • ベストアンサー
    • MySQL
  • 最大値を含むレコードの抽出

    あるテーブルから、最大値を持つレコードのキーと最大値だけでなく、そのレコードの値を出したいと思います。 最大値をもつレコードを抽出して、元のレコードと結合するしか方法はないのかなと思い、類似した質問があるような気もするのですが、条件が異なるとうまく行かないため、自分なりに考えてみました。 データベースはDB2です。 SELECT a.倉庫,a.品目,a.単価 FROM 在庫マスタ as a where (a.品目,a.単価) in (select b.品目, max(b.単価) from 在庫マスタ as b group by b.品目) つまり、副問合せするときの結合キーが複数あるとSQLがエラーになってしまうようなのです。 結合キーが2つ以上ある時、このようなパターンの対処方法は無いでしょうか?

  • Oracle:グループごとに最大日付の行を1件取得

    Oracle11gで、以下のようなテーブルから、 「IDごとに、DTが最大のレコードのBUMONを1件ずつ取得」 したいです。 <テーブルTB> ID DT BUMON ------------- 1 9/1 A 1 9/2 A 1 9/3 B ★Bを取得したい 2 9/4 C 2 9/5 C ★Cを取得したい 3 9/1 D 3 9/3 E 3 9/3 E ★Eを取得したい <取得したいデータ> BUMON ------- B C E <考えたSQL> select distinct A.BUMON from (select ID, DT, max(DT) over(partition by ID) as MAXDT, BUMON from TB) A, (select ID, DT, max(DT) over(partition by ID) as MAXDT, BUMON from TB) B where A.ID = B.ID and A.DT = B.MAXDT ; 上記のような方法を考えましたが、取得できますでしょうか? 現在、SQL実行環境がない場所にいるのですが、急ぎで確認したく、 どなたかお知恵を拝借できませんでしょうか?? また、可能であれば、★のレコード全体を取得するSQLもご教授いただきたく存じます。 <★のレコード全体を取得した結果> ID DT BUMON ------------- 1 9/3 B 2 9/5 C 3 9/3 E