- PR -

最大値を持つテーブルのほかのカラムのみを表示させる

投稿者投稿内容
amatsuno
会議室デビュー日: 2006/02/01
投稿数: 7
お住まい・勤務地: 静岡県(住まい)
投稿日時: 2006-06-05 16:48
簡単な質問でかもしれませんが、知っている方がおりましたら回答をお願い
いたします。

現在、すべてchar型のカラムを持つ以下のテーブルがあります。


カラムA カラムB カラムC
--------- -------- ---------
200604 tableA dateA
200605 tableB dateB
200606 tableC dateC

これを、カラムAの数値の最も高い値を持つ(最新の日付の)テーブルの、
カラムBのみ表示させたいのですが、どのようにすればいいのでしょうか?
(上記表の中から「tableC」だけを表示される方法です)

また、2番目に高い数値を表示させる方法はどうすればいいのでしょうか?
(上記表の中から「tableB」のみを表示さすれ方法です)


御回答、よろしくお願いいたします。
Yam
大ベテラン
会議室デビュー日: 2003/09/13
投稿数: 179
お住まい・勤務地: だんじり祭りの地
投稿日時: 2006-06-05 17:28
データベースの種類が分からないのでトリアーエズこれ置いときますね。
【order by】
amatsuno
会議室デビュー日: 2006/02/01
投稿数: 7
お住まい・勤務地: 静岡県(住まい)
投稿日時: 2006-06-05 17:36
すいません

oracle 10g 10.1.0.4.0

です
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2006-06-05 17:47
ORDER BYした結果をROW_NUMで抽出しちゃあかんの?
今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2006-06-05 17:47
いろいろな方法があると思いますが、

1番目、2番目共に対応しやすいのはこれかな?

コード:
SELECT * FROM
(
  SELECT カラムB FROM テーブル
  ORDER BY カラムA DESC
)
WHERE ROWNUM=1
;


最後のROWNUM=1をROWNUM=2に変えるだけで2番目になりますし。

あとはサブクエリなどを使っても実現できると思いますよ。
_________________
夏椰 @ わんくま同盟
夏椰の庵
Microsoft MVP for Windows Server System - SQL Server ( Jul 2006 - Jun 2008 )
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2006-06-05 17:49
夏椰氏。邪魔してすまん。
amatsuno
会議室デビュー日: 2006/02/01
投稿数: 7
お住まい・勤務地: 静岡県(住まい)
投稿日時: 2006-06-05 18:45
SELECT カラムB FROM
(
SELECT カラムB FROM テーブル
ORDER BY カラムA DESC
)
WHERE ROWNUM=1
;

ありがとうございます。
ただ、夏椰さんのご提示していただいたSQLで実行してみたのですが、
WHERE ROWNUM=1
のときは目的のテーブルを出すことができたのですが、
WHERE ROWNUM=2
のときに、
「レコードが選択されませんでした。」
の表示でレコードの取得ができません。

2番目のみの表示は別の方法のほうがいいのでしょうか?

なお、where句がないときにはすべて表示できているので、
この部分が問題であると思っています。






[ メッセージ編集済み 編集者: amatsuno 編集日時 2006-06-05 18:47 ]
amatsuno
会議室デビュー日: 2006/02/01
投稿数: 7
お住まい・勤務地: 静岡県(住まい)
投稿日時: 2006-06-05 19:21
SELECT カラムB FROM (
SELECT ROW_NUMBER() OVER(ORDER BY カラムA desc) LINENUM,
カラムA , カラムB
FROM テーブル名
ORDER BY カラムA desc
)
WHERE LINENUM = 2;

上記の文で2行目をとることに成功いたしました。
ご教授、ありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)