電子書籍の厳選無料作品が豊富!

SQLについてですが、例えば下記のような表があり、

表.
no name etc
0001 aaaa 1
0002 bbbb 1
0003 cccc 2
0004 dddd 1

この表から、「etc = '1'」の列を抽出すると、3件が返ってきますが、
その返ってきたデータの一番最後のデータのみを抽出したい場合はどのようにすればよいのでしょうか?
(no = 0004 and etc = 1以外の方法でお願いします。。)

A 回答 (5件)

>とやった場合の結果から、エイリアスの「etc_count」を検索条件に使う事って出来ないんですか?



出来ないと思います。(さすがに自宅にOracleを持っているわけではないので、試せないのですが。)
グルーピングしてから、HAVINGで(エイリアスではなく式の方を)指定すれば、ひょっとしたら何とかなるかもしれないです。

ですが、この方法だとパフォーマンス的に問題があるかもしれませんね。
nが少ない数でしたら、素直にn行フェッチした方が速い気はしますね。
或いは ADOかoo4oでMOVEするか… っていうか、それ位しか思いつきませぬ(汗

項目に増減のないマスタ項目などで、かつ頻繁に検索するのなら、一旦クライアントにno列を全件取り込んでから… ってのもありかも。
    • good
    • 0
この回答へのお礼

エイリアスで検索は、やっぱしダメですか。。
そもそも、一件のSQL文で条件指定で絞り込みまくって結果を取得しようというのが間違いでした。。
よくよく考えてみれば、別の手段でやればって感じですね(^^);

いろいろ回答してもらってありがとうございました。

お礼日時:2003/01/28 10:18

ご参考までに


Oracleであればトップnクエリというのができます。

例)etcが'1'でno順にソートし上位10レコードのみ抽出する

select rownum, no, name, etc from table
where etc = '1' and rownum <= 10
order by no
;


ただし以下の命令で10位の情報を得ることはできません。
この命令では行を返しません。
理由は、1行目はrownum=1なので条件に合わずrownumがカウントアップされず、2行目以降もすべて条件にあわないためです。

select rownum, no, name, etc from table
where etc = '1' and rownum = 10
order by no
;
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
やりたかった事が、rownum = 5の条件にヒットするものを取得したいってゆう感じなのでした。。

ですので、別の手段で行おうと思います。
いろいろ考えてもらって、ホントにありがとうございました。

お礼日時:2003/01/28 10:21

#2, tksoftさんの回答が正解かと思いますが、Accessなら、Top句がありますよね。



SELECT TOP 1 *
FROM 表
WHERE etc = '1'
ORDER BY no DESC;

こんな感じです。Access限定ですが(^^;

この回答への補足

回答有難うございます。
すみません。。
これも書き忘れていました。。
DBはOracle9iでした。。

一つお伺いしたいのですが、
例えば、
SELECT no, name, etc, ROW_NUMBER() OVER (PARTITION BY etc ORDER BY no) AS etc_count FROM 表名 WHERE etc = '1';
とやった場合の結果から、エイリアスの「etc_count」を検索条件に使う事って出来ないんですか?
再度の回答、宜しくお願い致します。

補足日時:2003/01/27 22:27
    • good
    • 0

「一番最後のデータ」という意味がちょっと不明ですが、とりあえずnoの一番大きいデータというふうに解釈します。


SELECT no, name, etc FROM TableName
WHERE etc = 1
AND no IN (SELECT MAX(no) FROM TableName)
と、いうのはどうでしょう。

ポイントはIN句です。

この回答への補足

すばやい回答有難うございます。
私の説明間違いで、少し書き足りない部分が在りました。。
表.
no name etc
0001 aaaa 1
0002 bbbb 1
0003 cccc 2
0004 dddd 1
0005 eeee 2
0006 ffff 1
のようなテーブルの時に、no=0004のデータのみを抽出したいのです。
決して最後のデータを取りたいというわけではなく、
ある基準のデータから、etc=1かつX番目のデータを抽出したいという感じです。

私の説明が言葉足らずになってしまったのですが、
こういう場合だとどうなるんですか?
度々で申し訳ありませんが、宜しくお願い致します。

補足日時:2003/01/27 22:11
    • good
    • 0
この回答へのお礼

回答有難うございました。

お礼日時:2003/01/28 10:00

noは連番なんですよね?


でしたら、

SELECT MAX(no),name,etc
FROM テーブル名
WHERE etc = 1
GROUP BY name

ではダメですか?

この回答への補足

すばやい回答有難うございます。
私の説明間違いで、少し書き足りない部分が在りました。。
表.
no name etc
0001 aaaa 1
0002 bbbb 1
0003 cccc 2
0004 dddd 1
0005 eeee 2
0006 ffff 1
のようなテーブルの時に、no=0004のデータのみを抽出したいのです。
決して最後のデータを取りたいというわけではなく、
ある基準のデータから、etc=1かつX番目のデータを抽出したいという感じです。

私の説明が言葉足らずになってしまったのですが、
こういう場合だとどうなるんですか?
度々で申し訳ありませんが、宜しくお願い致します。

補足日時:2003/01/27 22:02
    • good
    • 0
この回答へのお礼

回答有難うございました。

お礼日時:2003/01/28 10:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!