• ベストアンサー

グループ毎の最大値を持つデータのみ抽出したい

enemyの回答

  • ベストアンサー
  • enemy
  • ベストアンサー率75% (3/4)
回答No.3

質問通りにSQL作るとこんな感じ SELECT MIN(t.個別ID) 個別ID, t.グループID, t.順位, t.個数 FROM table_1 t INNER JOIN (SELECT a.グループID, MAX(a.個数) 個数 FROM dbo.Table_1 a GROUP BY a.グループID) ex on ex.グループID=t.グループID AND ex.個数 = t.個数 GROUP BY t.グループID, t.順位, t.個数

関連するQ&A

  • グループ毎のデータを抽出する方法について

    A4からD23にグループ毎にデータがあります。 当データのグループ名を指定するとF4からI16までにデータを抽出する方法を教えて下さい。 ファィルを添付ます。 よろしくお願いします。

  • Group By を使用して任意のカラムの最大値のデータを取得する。

    Group By を使用して任意のカラムの最大値のデータを取得する。 次のようなテーブルデータがあるとします。   ID    店舗CD    適用日付   A001   101      20100701   A002   101      20100801   A003   101      20100901   B001   102      20100701   B002   102      20100801   B003   102      20100901 抽出イメージですが、このテーブルデータの店舗コードをGroupByして、MAX(適用日付) としたときにIDが取得できなくなります。 なのでGroupByしたときの日付最大値のデータのIDを取得したいのですがいい方法が浮かびません。  同じテーブルデータでGroupBy(店舗コード)、MAX(適用日付)としたサブクエリを(店舗CD=店舗CD)、(適用日付=適用日付)とInnerJoinする方法も考えましたが、万が一、適用日付と店舗CDが同一のものがあった場合、店舗CDが重複してしまいます。  各店舗CDの最大適用日付のID取得したいのです。 なのでイメージはGroupby(店舗CD)とMAX(適用日付)とした時にMAX(適用日付)のIDを取得し、 なおかつ欲をいえば、MAX(適用日付)のIDが複数存在する場合は、1店舗CDにつき一つの適用日付を取得したいです。(この際、IDはなんでもいいです。) 簡単そうなことですごく悩んでいます。 どなたか助けてください。 よろしくお願いします。

  • グループ中で最大値を含む行を抽出するSQLはどう書けば良いでしょうか

    列A,Bでグループ化し、グループ中で列Cが最大値の列を取得したいのです。 数百万件あるので極力低コストにしたく、 副問合せはINDEXが効かないと聞いたのですが、 それ以外思いつきませんでした。 副問合せしない方法はないでしょうか? また、副問合せの中でコストの低いSQLはどんなものでしょうか。 ■テーブルです 名前 型 CUST_ID CHAR(8) BRANCH_ID CHAR(4) VALID_DATE DATE MYDATA VARCHAR2(20) CUST_ID BRAN VALID_DA MYDATA 19740704 0000 06-01-01 comment0001 19740704 0000 05-12-01 comment0000 19740704 0000 06-02-01 comment0002 19740704 0001 06-01-01 comment0011 19740704 0001 06-03-01 comment0012 ■このような結果が欲しいのですが。。。 CUST_ID BRAN VALID_DA MYDATA 19740704 0000 06-02-01 comment0002 19740704 0001 06-03-01 comment0012 ■考えたSQLです(検証済) select a.cust_id,a.branch_id,a.valid_date,a.mydata from test a,(select cust_id,branch_id,max(valid_date) as mvd from test group by cust_id,branch_id) b where a.cust_id=b.cust_id and a.branch_id=b.branch_id and a.valid_date=b.mvd ; select a.cust_id,a.branch_id,a.valid_date,a.mydata from test a where not exists (select * from test b where a.cust_id=b.cust_id and a.branch_id < b.branch_id) ; select cust_id,branch_id,valid_date,mydata from test where (cust_id,branch_id,valid_date) in (select cust_id,branch_id,max(valid_date) from test group by cust_id,branch_id) ; select cust_id,branch_id,valid_date,mydata from (select cust_id,branch_id,valid_date,mydata,max(valid_date) over(partition by cust_id,branch_id) as mvd from test) where valid_date=mvd ;

  • データ抽出マクロ?

     お世話になります! ExcelでB~Hまで”1~50”の数字のデータがランダムに入力してあり、その各数のデータ個数が一目で分かる様”J1~S1”に1~10、”J2~S2”に1~10のデータ個数をCOUNTIF関数にて求められる様になっています。   同様に”J3~S3”に11~20、”J4~S4”に11~20のデータ個数・・・数字の下にデータ個数という様、一行置きにJ10~S10まであります。  そこで今回やりたいのは例えば・・・J1をクリックするとJ2に求められた”1”のデータが”B~H”の範囲の何処にあるか分かる様、”1”だけが太字になる、もしくは赤字になるという様にできますか? 同様に50まで出来る様にしたいです。  すいませんが素人の為、今目的を見つけて勉強しているところなので 宜しくお願いします!

  • 最大値のみレコードを抽出する方法

    下記の通りに、品名、産地、個数が書かれている in.csvから、個数が最大値であるレコードをピックアップして、 out.csvに出力したいと考えてます。 どのようにしたら、可能でしょうか。 (※in.csvのデータは、ソートされていません。) 私は、in.csvを1行ずつ構造体に代入して、 個数が一つ前のデータより、大きい場合は、 データを上書きする。小さい場合は、代入しない という方法で、out.csvが作れるのではないかと 考えてますが、他にも効率がよい方法がありましたら、 教えてください。 ========in.csv=========== 品名  産地  個数 りんご 青森  2 りんご 青森  3 もも  山梨  5 もも  山梨  6 もも  山梨  7 かき  和歌山 8 かき  和歌山 5 かき  和歌山 3 りんご 青森  4 ======================== ========out.csv========= 品名  産地  個数 りんご 青森  4 もも  山梨  7 かき  和歌山 8 ======================== 以上です。

  • NotesのDBからデータを抽出する方法について

    こんにちは、このたびはお世話になります。 現在、Notes6.5を使用しております。 NotesDBからデータを取り出す際に、書き出し機能を使っているのですが、 Notes自身の出力機能が使いにくく、ほしい形で出力されません。 現在下記二点の問題の解決方法を探しております。 (1)添付ファイルがあった場合、添付・画像は出力されない。 (2)一覧表にはないが、詳細画面にはある項目は出力されない。 ※一覧表から各記事のデータを書き出しております。 Notesのデータを出力(コンバート)できるツールを見てみたのですが、 添付も出力できるものが見つけることができませんでした。 ※Microsoft Exchange用のコンバートツールなど   (Notes→「中間ファイル(CSVなど)」→Microsoft Exchange) 何か便利なツール等ご存知でしたら教えて頂けませんでしょうか

  • javascriptにおけるXMLのデータ抽出

    HTML+javascriptについて。 XMLを使用してデータを表示する際、 100件のデータがあるとして、その中にA、B、Cタイプが あるとします。 この場合においてAタイプのものを抽出する、ということを する場合において、どのようにプログラムを組むのか、また、 XMLデータ構造としてはどのようにすればいいのか教えてください! (personタグでなくてAタグ、Bタグ・・・にはしない方法です) データ構造としては1と2ではどちらがいいのか? データ構造1 <group>  <person type="A" id="A01" value="医者"/>  <person type="B" id="B01" value="先生"/>  ・・・ </group> データ構造2 <group>  <person type="A">   <id>A01</id>   <value>医者</value>  </person>  <person type="B">   <id>B01</id>   <value>先生</value>  </person>  ・・・ </group>

    • ベストアンサー
    • XML
  • SQLで二番目に新しいデータの抽出

    作業TBL内で2番目に新しい登録日と同一の登録日である、 情報TBLのIDを抽出を行いたいのですが、 下記だと最新の登録日のIDが出てきます。 どうしたら二番目に新しいデータが取り出せますか? SELECT KMDT010.ID,MAX(KMDT010.登録日付) AS 登録日付 FROM 情報 KMDT102, 作業 KMDT010 WHERE KMDT102.ID = KMDT010.ID GROUP BY KMDT010.ID

  • Accessで最小値と最大値を一度で取得する方法

    OS:WinXP Access:2000 下記の状態にしたいのですが よいSQL文が思いつきません。 MINのみのデータを抽出する方法は分かるのですが select ID,Name,Min(Date) from tblA group by ID,Name,Date MAX(Date)も出力しようとすると、Dateが最小のNameの出力方法が分かりません。 テーブル(tblA) ID|Name|Date --------------- 01|C |8/10 01|A |8/11 01|B |8/12 ↓ クエリ実行後 ID|MIN(Name)|MIN(Date)|MAX(Date) ----------------------------------- 01|C |8/10 |8/12 よろしくお願いいたします。

  • データの抽出およびデータ件数

    こんにちは。お世話になっております。 お忙しい中恐縮ですが、アドバイスを頂戴出来ればと投函させていただきます。 siwake: no id group_type 1  2  未分類 2  1  未分類 3  1  売上 4  1  仕入 5  2  売上 6  1  仕入 group_select: no id group_type 1  1  未分類 2  1  売上 3  1  仕入 4  2  未分類 5  2  売上 以上のようなテーブル(shiwakeは日々蓄積されるデータ。group_typeは基本となるべく区分用データ)があり(各idはそれぞれのデータを紐付けるためのもの)、下記のようにgroup_selectにてidを検索した際、group_typeを表示、かつshiwakeテーブル内にある、同じidで登録のある、group_typeの件数を表示させたく考えてます。 id=1を検索 group_type 件数 未分類   1 売上    1 仕入    2 そこで、これまで検索に関し、多くのアドバイスを頂いていることから下記コードを記述してみましたが、エラーもないまま結果が返ってきません。 毎度お恥ずかしい質問で恐縮ですが、今一度ご指導いただければと、投函させていただきました。 お忙しい中恐縮ですが、宜しくお願い申し上げます。 $sql = "select FG.`no`, FG.`id`, FG.` group_type`, F.`no`, F.`id`, count(F.`no`) as `count` from `siwake` AS F right join `group_select` AS FG on FG.`no` = F.`id` where FG.`id` = '$id' group by FG.`no` order by FG.`no` desc";

    • ベストアンサー
    • MySQL