• ベストアンサー
  • すぐに回答を!

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が小さいもの 以上、よろしくお願いします。

共感・応援の気持ちを伝えよう!

  • 回答数4
  • 閲覧数217
  • ありがとう数3

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

  • ベストアンサー
  • 回答No.4
  • root139
  • ベストアンサー率60% (488/809)

#3 に私が書いた条件は合っていたのでしょうか? 合っていたとして・・・。 > 上記のSQLで可能でしょうか? 可能ではないですね。 ただし別の方法を使ったSQLでは可能です。かなり冗長ですが。 ---------------------------------------- SELECT * FROM tbl a WHERE EXISTS (SELECT * FROM tbl b WHERE (a.aaa = b.aaa OR a.ccc = b.ccc OR a.ddd = b.ddd OR a.eee = b.eee OR a.ggg = b.ggg) AND a.bbb <> b.bbb) AND NOT EXISTS (SELECT * FROM tbl b WHERE a.aaa = b.aaa AND a.bbb = b.bbb AND a.ccc = b.ccc AND a.ddd = b.ddd AND a.eee = b.eee AND a.ggg = b.ggg AND a.hhh > b.hhh) ORDER BY aaa, bbb, ccc, ddd, eee, ggg ---------------------------------------- NOT EXIST句は aaa,bbb,ccc,ddd,eee,ggg が同じで hhh が小さい行が存在しない、つまり hhh が最小の行という条件を表しています。 また、window関数を使っても同じ事が出来そうです。 蛇足ですが、なかなか回答が付かないからといってマルチポストするのはやめましょう。

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • SQL上位n件ORDERBY 以降ORDERBY

    SQLのORDER BYについてご教授いただけますでしょうか。 例えば、10件のデータのうち、5件を指定のORDERBYで抽出し、 残り5件をORDERBYで抽出するということは可能でしょうか。 ID 名前 システムフラグ 1 AAA 1 2 BBB 1 3 CCC 1 4 DDD 1 5 EEE 1 6 FFF 2 7 GGG 2 8 HHH 1 9 III 1 10 JJJ 1 上記のようなデータがあった場合、 以下のように抽出されるようにしたいと思っています。 ID 名前 システムフラグ 1 AAA 1 2 BBB 1 3 CCC 1 6 FFF 2 7 GGG 2 4 DDD 1 5 EEE 1 8 HHH 1 9 III 1 10 JJJ 1 システムフラグが2が入っているものは、 5件からの4,5件目に表示されるようにして、 それ以降はIDの昇順で表示されるようにしたいと思っております。 5件というのは、決め打ち5件ではなく、条件によっては変わるのですが、 5件が7件となった場合は、6,7件目がシステムフラグ2のものがくるようにしたいです。 指定した件数から下2つ目がシステムフラグのものが取得したいということです。 わかりにくいと思いますが、どのようなSQLを書けば抽出できるか ご教授いただけますでしょうか。 どうぞ宜しくお願い致します。

  • エクセルの重複データの抽出(条件付)

    エクセルの以下のようなデータから3時間以上連続で出現しているデータを抽出してその行に色をつけるようなマクロを組みたいのですがそのような方法はないでしょうか。 A列   B列 6/1 3:00 AAA社 6/1 3:00 BBB社 6/1 3:00 CCC社 6/1 2:00 AAA社 6/1 2:00 CCC社 6/1 2:00 DDD社 6/1 1:00 AAA社 6/1 1:00 DDD社 6/1 1:00 EEE社 6/1 1:00 FFF社 6/1 1:00 GGG社 6/1 0:00 AAA社 6/1 0:00 BBB社 6/1 0:00 CCC社 6/1 0:00 DDD社 6/1 0:00 GGG社 6/1 0:00 HHH社 ・ ・ ・ A列は日時、B列は企業名です。 B列の企業名が3時間以上連続して出現している行を抽出して、その行(または企業名)に色をつけるか、または重複してる企業名の一覧表示をしたいです。 この例の場合、AAA社とDDD社になります。 (CCC社は3回出現してるけど、3時間連続していないので対象外。) 3時間以上連続して出現というのがポイントです。 データは2000行ほどで、24時間分です。 マクロ初心者でいろいろ検索してみたのですが、わからずすごく困っています。よろしくお願いします。

  • VBAでCSV内にある改行を取る方法

    あるシステムが吐くcsvファイルの項目の中に改行が入っているものがあります。 例) 01,aaa,bbb(改行)bbb,ccc(改行) 02,ddd,eee,fff(改行) 03,ggg(改行)ggg,hhh,iii(改行) このCSVファイルをエクセルのマクロで読み込んでシートに展開したい のですが、項目中にある改行で別レコードを認識してしまいます。 結果) A B C D ---+---+---+--- 01 aaa bbb  bbb ccc 02 ddd eee fff 03 ggg ggg hhh iii これを以下のようにしたいのですが・・・ A B C D ---+------+------+---- 01 aaa bbbbbb ccc 02 ddd eee fff 03 gggggg hhh iii どうやればよいでしょうか? ご教授お願いいたします。

その他の回答 (3)

  • 回答No.3
  • root139
  • ベストアンサー率60% (488/809)

補足ありがとうございます。 おそらく下記のような条件になると思われますがどうでしょうか? 1. テーブルの中に aaa,ccc,ddd,eee,ggg のどれかの値が等しくbbbの値が異なる行が存在する。 2. aaa,bbb,ccc,ddd,eee,ggg が同じ行が有る場合は hhh が最小のものを抽出する。 もし、これでよろしければ、下記の様なSQLになると思います。 ---------------------------------------- SELECT aaa, bbb, ccc, ddd, eee, ggg, MIN(hhh) FROM tbl a WHERE EXISTS (SELECT * FROM tbl b WHERE (a.aaa = b.aaa OR a.ccc = b.ccc OR a.ddd = b.ddd OR a.eee = b.eee OR a.ggg = b.ggg) AND a.bbb <> b.bbb) GROUP BY aaa, bbb, ccc, ddd, eee, ggg ORDER BY aaa, bbb, ccc, ddd, eee, ggg ----------------------------------------

共感・感謝の気持ちを伝えよう!

質問者からの補足

早速のご回答ありがとうございます。 (テーブル:AAA) aaa bbb ccc ddd eee ggg hhh iii ------------------------------- 111 111 111 111 111 111 111 ii1 112 112 112 112 112 112 111 ii2 112 113 113 113 113 113 111 ii3 114 114 114 114 114 114 111 ii4 114 114 114 114 114 114 112 ii5 114 115 115 114 114 115 111 ii6 114 115 115 114 114 115 112 ii7 116 116 116 116 116 116 111 ii8 116 116 116 116 116 116 112 ii9 116 116 116 116 116 117 111 ii0 116 116 116 116 116 117 112 ii1 118 118 118 118 118 118 118 ii2 のようにテーブル:AAAにiiiを追加し、 aaa bbb ccc ddd eee ggg hhh iii ------------------------------- 112 112 112 112 112 112 111 ii2 112 113 113 113 113 113 111 ii3 114 114 114 114 114 114 111 ii4 114 115 115 114 114 115 111 ii6 を抽出する場合(条件にないiiiも抽出する)も、 上記のSQLで可能でしょうか? よろしくお願いします。

  • 回答No.2
  • root139
  • ベストアンサー率60% (488/809)

提示されている条件に不明な点が有りますので確認です。 > ・aaa,ccc,ddd,eee,gggが重複、 「aaa,ccc,ddd,eee,ggg が全て同じ値」という事で良いでしょうか? > ・hhhが小さいもの 何と比べて小さいのでしょうか? aaa,ccc,ddd,eee,ggg と比べてでしょうか? それとも他の全てのカラムと比べるのでしょうか? あるいは決まった数と比べてでしょうか? > ・bbbが異なるもの 何と異なるのでしょうか? aaa,ccc,ddd,eee,ggg の値と異なるのでしょうか? それとも他の全てのカラムの値と異なるのでしょうか?

共感・感謝の気持ちを伝えよう!

質問者からの補足

回答ありがとうございます。 質問が適切ではなかったので以下のご質問にコメントいたします。 > > ・aaa,ccc,ddd,eee,gggが重複、 >「aaa,ccc,ddd,eee,ggg が全て同じ値」という事で良いでしょうか? 御認識の通りです。 > > ・hhhが小さいもの > 何と比べて小さいのでしょうか? > aaa,ccc,ddd,eee,ggg と比べてでしょうか? > それとも他の全てのカラムと比べるのでしょうか? > あるいは決まった数と比べてでしょうか? 「aaa,ccc,ddd,eee,ggg が全て同じ値」のものに対して一番小さい値となります。 114 114 114 114 114 114 111 ・・・A 114 114 114 114 114 114 112 ・・・B 114 115 115 114 114 115 111 ・・・C 114 115 115 114 114 115 112 ・・・D でいいますと、AとB、CとDふぁ条件に一致してその中でhhhが小さい AとCを抽出したいということです。 > > ・bbbが異なるもの > 何と異なるのでしょうか? > aaa,ccc,ddd,eee,ggg の値と異なるのでしょうか? > それとも他の全てのカラムの値と異なるのでしょうか? 「aaa」が一致しているものの中でbbbが異なるものを指しています。 よろしくお願いします。

  • 回答No.1

はじめまして。 select * from table1 where aaa=ccc && aaa=ddd && aaa=eee && aaa=ggg && aaa!=bbb && aaa>hhh これで抽出できませんか? テーブル名はtable1としました。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ご回答ありがとうございます。 質問の内容が適切ではなかったようです。 No.2の方より質問がありましたのですそちら再度質問させていただきます。

関連するQ&A

  • SQL 複数条件を設定

    PostgreSQLを使用しております。 それぞれ、TABLE1とTABLE1があり、 TABLE1 a-1   a-2   b-1    ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄    1   bbb   aaa   ddd      2   ggg   bbb   ccc        3   bbb   mmm  ddd       4   ggg   mmm  ccc    : TABLE2   a-1   a-2        c-1   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄     1   bbb   aaa        eee         2   ggg   mmm       qqq    : 質問1. TABLE1.a-1=TABLE2.a-1 and TABLE1.a-2=TABLE2.a-2 を条件にして結合 したい場合、どのように結合すればよいのか。 期待結果 a-1   a-2   b-1  c-1   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄    1   bbb   aaa   ddd  eee    2   ggg   bbb   ccc   ※    3   bbb   mmm  ddd   ※    4   ggg   aaa   ccc   qqq ※は空白でもNULLでもよい 質問2. 上記が可能な場合にさらに質問です。 TABLE1およびTABLE2が、SELECT,WHEREによって抽出されたものとした場合、 1つのSQL文で質問1と同様の出力にするにはどのように結合すればよいのか。(はたまた無謀なのか) 知識不足のため悩んでいる状況なので、 どなた様か知識がある方にご教授願いたく思います。

  • エクセル 関数 対象を全て抽出する

       列A  列B 行1  1   AAA 行2  2   BBB 行3  2   CCC 行4  1   DDD 行5  1   EEE 行6  2   GGG 行7  2   HHH 列Aが2であるものすべて抽出する方法? 結果が 検索値↓(手入力) 2 ↓ この表を作りたい 2 BBB 2 CCC 2 GGG 2 HHH

  • SQL文について

    お世話になります。 Oracle初心者です。 二つのテーブルから下記の様にデータを抽出 したいのですが、その方法をご教授くださいます様、 宜しくお願い致します。         記 テーブル1 品番  全長 aaa 1111 bbb 2222 ccc 3333 テーブル2 品番  入数 bbb 5 ddd 6 ggg 7 SQL結果 品番 全長  入数 aaa 1111 bbb 2222 5 ccc 3333 ddd 6 ggg 7

  • 大量データの一括変換

    aaa.bbb ccc.ddd eee.fff ggg.hhh 上記のようなデータが約1万行程度あるのですが、これを下記のようなユーザ名・メルアドに変換するコマンド等、お分かりになる方教えてください。ユーザ名・メルアドの間は半角スペースです。 ある程度自分で調べた結果awk等で出来そうな気がするのですが。。。 ユーザ名  メルアド   ↓     ↓ aaa.bbb aaa.bbb@hoge.com ccc.ddd ccc.ddd@hoge.com eee.fff eee.fff@hoge.com ggg.hhh ggg.hhh@hoge.com

  • C言語による「テキストファイルの読み書き(fprintf)」について

    C言語による「テキストファイルの読み書き(fprintf)」について質問です ずぶの初心者ですが、既知のファイルの1行目に指定した文字列を付加させるプログラムを作りたいと思っています。 以下のように作りました。 ------------------------------------------------------------ #include <stdio.h> int main(void) { FILE *fp; fp = fopen("test.csv","r+"); fprintf(fp,"コントロールカラム1,コントロールカラム2,・・・(略)・・・,コントロールカラム56\n"); fclose(fp); return 0; } ------------------------------------------------------------ このとき「test.csv」の内容が以下のようであったとします。(容量は1MBくらいです。) 001,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj 002,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj ~(略) 5000,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj この状態でプログラムをコンパイルして実行すると、「test.csv」の内容が以下のようになってしまいます。(一行目が消える) AAA,BBB,CCC,DDD,EEE 002,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj ~(略) 5000,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj またcsvの行が増える度に妙な挙動になっていきます・・・(一行あいたり、先頭行が5行ほど消えたり) 希望する動作としては コントロールカラム1,コントロールカラム2,・・・(略)・・・,コントロールカラム56 001,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj 002,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj ~(略) 5000,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj のようになるようにしたいのですがどのようにすればよいのでしょうか。 よろしくお願いします。 (使用ソフト:Borland C++ Compiler, Cpad) 参考にしたサイトの項目:http://homepage3.nifty.com/mmgames/c_guide/17-01.html

  • SQL文の書き方

    SQL文の書き方を教えて下さい。 以下の2つのクエリー(1のクエリー&2のクエリー)を1つのクエリーで1度に抽出をかけたいのですがSQL文の書き方がわかりません。 データの発生条件としては TableBのField1は必ずTableAのField1に存在するという条件です。 TableAのField1が「AAA」から「EEE」まである場合は、TableBのField1も必ず「AAA」から「EEE」の範囲内で発生します。 よろしくお願い致します。 1のクエリー ---------------------------------------------------------------- TableA Field1 ---------------------------------------------------------------- AAA AAA AAA BBB BBB CCC DDD DDD EEE EEE EEE ---------------------------------------------------------------- Field1をサマライズしてカウントと名称を取得するクエリー Select Count(TableA.Field1) as RecCount, TableA.Field1 From TableA 結果 RecCount  Field1 3      AAA 2      BBB 1      CCC 2      DDD 3      EEE ---------------------------------------------------------------- 2のクエリー ---------------------------------------------------------------- TableB Field1 ---------------------------------------------------------------- BBB CCC CCC EEE ---------------------------------------------------------------- Field1をサマライズしてカウントと名称を取得するクエリー Select Count(TableB.Field1) as RecCount, TableB.Field1 From TableB 結果 RecCount  Field1 1      BBB 2      CCC 1      EEE ---------------------------------------------------------------- 希望する結果 TableAのRecCount TableBのRecCount TableAのField1 3                   AAA 2         1         BBB 1         2         CCC 2                   DDD 3         1         EEE

  • sedで文字列の抜き出し

    ある一部分の文字列を抜き出したく、sedを使用したいと思って試行錯誤しております。 ↓あるファイル内の文字列 aaa bbb=ccc:ddd=eee:fff=ggg: aaa bbb=hhh:ddd=iii:fff=jjj: ※aaaとbbbの間はスペースです。 ※bbb,ddd,fffはある一定のキーワードです。 ※ccc,eee,ggg,hhh,iii,jjjはバラバラの文字列で長さも一定ではありません。 【質問】 上記の文字列の中でddd=の後の文字列(eee,iii)のみを抜き出したいです。 以下のようなsedを試してみましたが、 eee:fff=ggg iii:fff=jjj が抜き出されてしまいます。 sed 's/.*:ddd=\(.*\):\(.*\)$/\1/' 恐れ入りますが、皆様の知恵をお貸し下さい。

  • ピポッド 集計の追加

    ご存知の方、お知恵をお貸し下さい。 現在、下記のようなピポッドを組んでいます。 グループ1  AAA (AAAの合計、以下aaa+bbb+cccの合計) aaa bbb ccc        BBB (BBBの合計、以下ddd+eee+fffの合計) ddd eee fff CCC (CCCの合計、以下ggg+hhh+iiiの合計) ggg hhh iii グループ2・・・以下続く 上記に、BBBとCCCだけの合計を、(グループ1の中に)追加したいのです。 このように、合計したい項目だけを指定して 集計する事は可能でしょうか? 数式の集計アイテムの追加を行いましたが 上手くできませんでした。 ご存知の方、ご教授いただければ幸いです。 宜しくお願い致します。

  • SQL 複数条件を設定

    使用言語はjavaで処理しており、 SQL Server2005にて下記のようなテーブル(T_Kekka)があります。    ID   a-1   a-2   b-1   b-2   c-1   c-2     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄    1   bbb   aaa   ddd    ccc   eee   fff       2   ggg   bbb   ccc     hhh   iii    jjj       3   bbb   mmm   ddd   ccc   fff    eee       4   bbb   aaa   ccc    ddd   qqq   rrr       5   zzz   sss   ttt     ccc   vvv   xxx       6   zzz   aaa   ttt     ccc   vvv   fff       7   zzz   zzz   zzz     zzz   zzz    zzz       8   qqq   rrr   ccc     ddd   fff    eee    検索する値は下記の通りです。 検索値 |a-1|a-2|b-1|b-2|c-1|c-2|  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ |aaa|bbb|ccc|ddd|eee|fff| 期待値としては、aはaのグループで検索、bはbのグループで検索、cはcのグループで検索をし、 一致個数の多い順に出力したいと考えております。(理想は下記のような感じです。) また、グループ内であれば逆転していてもOKです。 (例えばID:1のaグループのような感じです。) *1 一致数が同じ場合はcグループの数が多いデータが最優先となり、その他はID順になります。 期待値    ID   a-1   a-2   b-1   b-2   c-1   c-2   一致数  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄    1   bbb   aaa   ddd   ccc   eee   fff     6    3   bbb   mmm   ddd   ccc   fff    eee    5    8   qqq   rrr    ccc   ddd   fff    eee    4・・・*1    4   bbb   aaa   ccc   ddd   qqq   rrr     4    6   zzz   aaa   ttt    ccc   vvv    fff     3    2   ggg   bbb   ccc   hhh   iii     jjj      2    5   zzz   sss   ttt    ccc   vvv    xxx     1    7   zzz   zzz   zzz    zzz   zzz    zzz     0 知識不足のため私には複雑すぎて悩んでいる状況なので、 どなた様か知識がある方にご教授願いたく思います。 また、まだテスト段階なので現状のようなテーブル構造にしてしまいましたが、 他のテーブル構造の方がデータが抽出しやすかったり、レスポンスがいい場合がありましたら、 ご教授いただけると助かります。 説明が分かりづらく表が見づらくて申し訳ございませんが、 宜しくお願い致します。

  • Perlの正規表現について

    Perlの正規表現について質問です. ■質問 aaa bbb aaa bbb ccc "ddd" aaa bbb ccc "ddd eee" aaa bbb ccc ddd eee "fff ggg hhh iii" というような,文字列が書かれているファイルがあるとします. ※ダブルクォーテーションが無い行もあります. ※ダブルクォーテーション内のスペースの数は,行によってそれぞれ異なります. これを,ダブルクォーテーションの中にあるスペースだけ アンダーバーに置換する場合の正規表現を教えて下さい. つまり,下記の出力にしたいです. aaa bbb aaa bbb ccc "ddd" aaa bbb ccc "ddd_eee" aaa bbb ccc ddd eee "fff_ggg_hhh_iii" ■条件 ※ちょっと古いPerlでも動くよう,ゼロ幅肯定/否定後読((?<),(!<))は使わないでください. ※単に実現するだけなら, # cat inputfile | print -pe 'sub f(){}(shift;s/ /_/;return $_;); s/(\".*\")/&f($1)/e;' みたいな感じで置換できそうですが,「正規表現だけで簡単に書けるかどうか」が知りたいのです(正規表現だけで実現出来る場合,そのアルゴリズムを知りたいです).そのため,関数と/eオプションは使わないでください.

    • ベストアンサー
    • Perl