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をかけばよいか教えていただきたいです。
どうぞよろしくお願い致します。
nameが連続して同じということは nameの件数が2件以上というとになります。
nameをcountし、renbanはmaxを取得し、nameのcountが2件以上のrenbanをキーとして 抽出すればよいでしょう。
SQLといってもDBによって違いがありますので DBは記載しておいたほうがいいですね。
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
こんな感じで如何でしょうか?
ありがとうございます。
2014/12/01 19:01:41DBは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/03 00:12:30こういうのはストアドでカーソルを使うしかないかもね。