例えば以下のようなデータがあったとして、


nameが連続して同じで、かつrenbanが最大のレコードのみ抽出したいです。

renban group_id name
2183 596 yakisoba
2194 596 onigiri
2189 596 onigiri★
2184 598 pan
2190 598 cake
2195 598 cake★

どのようなSQLをかけばよいか教えていただきたいです。
どうぞよろしくお願い致します。

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2014/12/05 22:10:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:taknt No.1

回答回数13539ベストアンサー獲得回数1198

ポイント50pt

nameが連続して同じということは nameの件数が2件以上というとになります。
nameをcountし、renbanはmaxを取得し、nameのcountが2件以上のrenbanをキーとして 抽出すればよいでしょう。

SQLといってもDBによって違いがありますので DBは記載しておいたほうがいいですね。

id:yayayai

ありがとうございます。
DBはoracleです。
また、以下の場合、renban2196のramenは、次にgohanがきているので抽出したくないです。

renban group_id name
2183 596 yakisoba
2194 596 onigiri
2189 596 onigiri★
2184 598 pan
2190 598 cake
2195 598 cake★
2196 598 ramen
2197 598 gohan
2198 598 ramen

2014/12/01 19:01:41
id:taknt

連続してということは ソート順が 重要ですね。

こういうのはストアドでカーソルを使うしかないかもね。

2014/12/03 00:12:30
id:tezcello No.2

回答回数460ベストアンサー獲得回数69

ポイント50pt

Oracle は手元にありませんからテストできませんが、rowid が使えたはずですよね。

hatena というテーブルにご提示のデータが入っているとします。

SELECT *, MAX(rowid)
FROM hatena H1
WHERE EXISTS
  ( SELECT *
    FROM hatena H2
    WHERE H1.name = H2.name
      AND (H1.rowid - 1) = H2.rowid
  )
GROUP BY name

こんな感じで如何でしょうか?

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません