- ベストアンサー
スペシャリストの方! 助けてください! GROUP BY を使わずに最小値も求めたい。
table A A_No, 社員番号, 住所 1 ,0001,'東京都' 2 ,0002,'神奈川県' 3 ,0003,'千葉県' table B B_No,社員番号,履歴番号,日付 1,0001,1,2008/09/11 2,0001,2,2008/09/11 3,0002,1,2008/09/05 4,0002,2,2008/09/11 上記のようなtable A, tableBがあるとします。 社員ごとに今日日付で最小の履歴番号を持つB_Noを取得したいのです。 上記で言えば、今日が2008/09/11 だとして社員0001は 最小履歴番号 1 、社員0002は最小履歴番号 2 の B_Noを取得したいのです。 ただし、フレームワークの仕様によりgroup byが使えません・・・。 なにかいい案はありますか? どなたか助けてください! よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
何が使えて何が使えないか判らないのですが・・ 結合を使うなら・・ select a.社員番号, (select min(履歴番号) from tableB b where a.社員番号=b.社員番号 and b.日付>=trunc(sysdate,'dd')) 履歴番号 from tableA a ; 結合を使いたくない、TableBだけでやりたいなら・・ select 社員番号,履歴番号 from ( select b.*,row_number() over(partition by 社員番号 order by 履歴番号) R from tableB where 日付>=trunc(sysdate,'dd') ) where R=1 ;
その他の回答 (2)
- jamshid6
- ベストアンサー率88% (591/669)
GROUP BYが使えないというのは文字通りの意味と解していいのですか? (=GROUP BYの文字がなければよい。集計関数は使ってもよい) SELECT * FROM TableB s WHERE s.日付=(指定した日付) AND 履歴番号 IN (SELECT MIN(履歴番号) FROM TableB WHERE 社員番号=s.社員番号 AND 日付=s.日付) MINもだめなら、ROWNUMでやるしかないですが。。
- bodyshot
- ベストアンサー率14% (46/326)
社員の数だけSQL分を用意して個別に集計すればよいと思います。