• 締切済み

ある項目が最小の行だけを抽出する方法

以下のデータから、t_stampが一番古いidだけを取得 したいのですが、order by t_stampを使わずに8を抽出する方法はありますか? id t_stamp host 5 20010501 yahoo.co.jp 8 20010427 google.co.jp 7 20021111 goo.ne.jp

みんなの回答

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

select id from xx where t_stamp in (select Min(t_stamp) from xx); ではいかがですか?

回答No.1

minを使ってt_stampの最小を取り、そのidを取れば良いのではないでしょうか

matchori
質問者

補足

回答ありがとうございます。 確かに、Minを使った方がはやそうです(^^) Minを使って一発で取得する方法ありますでしょうか? select id from xx where t_stamp=Min(t_stamp) な感じで取得できるのかと思ったのですが、 エラーになり取得できません。 やはり、一度Min(t_stamp)でselectし、 whereでSelectしたMin(t_stamp)を指定しselectという ように2度Selectするのでしょうか?

関連するQ&A

  • selectで抽出したデータの特定カラムを空に

    selectで抽出したデータの特定カラムのデータを空にしたいのですが、どのような方法がありますでしょうか。 以下のようなofficeテーブルがありまして、データは1万件あったとします。 id name place  1 浅谷 大阪 2 亀山 東京 3 武本 名古屋 placeカラムに東京を含むidが5000未満のデータを抽出し、そのデータのplaceカラムをすべて空に(削除)したいと思っています。 SELECT * FROM office WHERE place like '%東京%' and id < 5000 order by id asc; 上記のselect構文で希望データを抽出することはできたのですが、その抽出したデータのplaceカラムを空に(データを削除)する方法が分かりません。 アドバイス頂けると助かります。 よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • MySQLで連番をつけて抽出したい

    以下のようなテーブル(test)があるとします。 id type  age --+----+----- 1  A   15 2  B   21 3  C   32 4  A   18 5  A   16 6  D   34 7  A   55 8  C   22 このテーブルを「SELECT * FROM test where type = 'A' order by id」で抽出すると、 id  type age --+-----+--- 1  A   15 ---(1) 4  A   18 ---(2) 5  A   16 ---(3) 7  A   55 ---(4) となると思いますが、phpからは「typeAで4番目に登録したもの」としてとしてクエリが 送られてくるので、id7のデータを4として抽出したいのです。 (search.php?type=A&no=4 という感じです) スマートに1文でいけますでしょうか? MySQLのバージョンは4.0.27です。 お詳しい方、どうぞ宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • 重複データの抽出方法(複数項目)

    以下のようなテーブルからc列とd列のデータが重複しているレコードを取得したいために、以下のSQLを試してみました。 a列|b列|c列|d列 ---|---|---|--- 01 |01 |01 |01 02 |01 |01 |01 03 |02 |01 |03 04 |02 |02 |03 05 |01 |01 |02 06 |02 |02 |03 select * from テスト where c in (select c from テスト group by c,d having count(*)>1) and d in (select d from テスト group by c,d having count(*)>1) そうしたところ、以下の結果になってしまいました。 想定では、○のレコードだけ抽出できると思ったのです。 ×のレコードを抽出したくないのですが、SQLのどこが 間違っているのでしょうか? a列|b列|c列|d列 ---|---|---|--- 01 |01 |01 |01 ○ 02 |01 |01 |01 ○ 03 |02 |01 |03 × 04 |02 |02 |03 ○ 06 |02 |02 |03 ○ (使用DB)SQLServer2000

  • ランダムに1データだけ抽出したい

    「おみくじ」みたいなものを作っています。 MYSQLにautoincrementでデータを蓄積しています。 PHPから1データだけランダムに取り出そうと以下の構文で抽出しています。 select * from data order by Rand() LIMIT 0,1; データ数はかなり貯まっているのですが、同じようなデータばかり抽出しているような気がしています。 これは気のせいでしょうか? また、データをしょっちゅう削除していたので、番号が飛び飛びになっています。 1.2.3.5.8.9.10.のような感じです。 このように歯抜けの状態でもRand()はちゃんと存在するデータからランダムに選んでいるのでしょうか?

    • ベストアンサー
    • MySQL
  • Is NULLを使わず、NULL項目をWhere条件で取得する方法

    ID・名前・カナ・備考の4項目をもつ氏名テーブルがあり、同じ名前・カナのレコードはまとめてしまいたいと考えています。 IDは最小のものを、備考は全レコードをくっつけて一つのレコードにする予定です。 Group Byしてcount(*)>1の名前・カナを抜き出し、抽出した名前・カナでWhereしてMIN(ID)や備考をSELECTしたいのですが、カナ=NULLの場合があり、Group ByまではできてもWhereでSelectすることができません。 nvl(カナ,'999999')=nvl(抽出したカナ,'999999')だとWhereで取得することもできるのですが、カナ='999999'と入力されているとNULLとの区別がつかなくなります。 Is NULLを使わず、NULL項目をWhere条件で取得する方法をご存知の方、教えてください。よろしくお願いします。 サンプルとして単純なテーブルを例にあげましたが、実際は数十の列項目をもつ数十のテーブルです。列項目の中には4000バイトのものもあります。 完璧にやるのならGroup Byせず、全レコードをOrder Byしてキーが変わったら更新するというやり方が望ましいのでしょうが、レコード数が多く、パフォーマンス的にあまり望ましくありません。 できるだけ作業が簡単な方法だと助かります。

  • SQLのSELECT文でのランダム抽出について

    SQLのSELECT文でのランダム抽出について データベースSQLiteでSELECT文の結果をランダムに抽出するには ORDER BY RANDOM()を使うようですが、前回ランダムに抽出された順序と同じ結果を得るにはどのようにすればよいでしょうか。 MySQLの場合は、ORDER BY RAND(n)でnの値を同じにすれば、同じ順序で抽出できるようですが、SQLiteでは無理なようです。 今考えているのはRANDOM()で得られた列の一つ(たとえばID)を一時的に別のテーブルを作成して保存後、その一時テーブルを利用するというものですが、もっと良い方法があるのではと思います。 何か別の方法がありましたら、教えていただきたくよろしくお願いいたします。

  • ACCES「抽出条件でデータ型が一致しません」

    環境 WindowsXP Access2003 SELECT A.ID, A.NAME, A.DATE FROM ( (SELECT ID, NAME, DATE FROM ・・・) A LEFT JOIN (SELECT ID, NAME, DATE FROM ・・・) B ON A.ID = B.ID ) ORDER BY A.ID こんな感じのSQLを実行すると、 「抽出条件でデータ型が一致しません」 というエラーとなります。 SQL文を以下の様に変更すると、エラーにはなりません。 1.「ORDER BY A.ID」排除 2.ORDER句を「A.ID」以外の「A.NAME」「A.DATE」「B.ID」「B.NAME」「B.DATE」に変更 3.ON句の順番を「ON B.ID = A.ID」に入れ替え(ORDER句は、「A.ID」のまま) なぜ、このようなエラーになるのでしょうか? 特に3が理解不能なのですが、 ON句の順番がORDER句に影響を及ぼすことがあるのでしょうか? 以上、よろしくお願いします。

  • 2つの条件を満たすのレコードのカラムを抽出する方法について

    下記のテーブルがあったとします。 【t_tblテーブル】 ――――――――――――― |id1  |id2 |id3  | ――――――――――――― |1   |1  |10   | |1   |2  |12   | |1   |3  |9   | |1   |4  |8   | |1   |5  |14   | |2   |1  |14   | |2   |2  |8   | |2   |3  |9   | |2   |4  |12   | |2   |5  |10   | |3   |1  |4   | |3   |2  |2   | |3   |3  |3   | |3   |4  |5   | |3   |5  |6   | |4   |1  |6   | |4   |2  |5   | |4   |3  |3   | |4   |4  |2   | |4   |5  |4   | ――――――――――――― このテーブルの特定のレコードを抽出する為に、 2つパラメータを渡すとします。 1. 12 2. 8 そして下記の条件を満たすレコードのid1を抽出したいと思います。 1. 「id3」 = 「12」 かつ 「id3」 = 「8」 を満たすid1 (※この時点で1と2がヒットします) 2. 条件1を満たした上で、「12」のid2 < 「8」のid2 (※この時点で1のみヒットします) 下記のSQLで条件1を満たせる事は確認しましたが、 条件2を満たす方法が分かりませんでしたので、 アドバイスいただける方がいらっしゃいましたら、 ご教示いただきたいと思います。 select id1 from t_tbl group by id1 Having SUM(CASE WHEN id3=12 Then 1 Else 0 End)>0 And SUM(CASE WHEN id3=8 Then 1 Else 0 End)>0 使用バージョンは7.4.19です。 よろしくお願いします。

  • 速度向上。

    速度向上。 Select A,B,C, (Select Count(*) FROM T_A WHERE SOME_ID = A.SOME_ID ) COUNTER , (Select MAX(REGISTER_TIME)FROM T_A WHERE SOME_ID = A.SOME_ID)MAX_REG_TIME FROM T_A as A WHERE ID LIKE '%1%' GROUP BY ID ORDER BY MAX_REG_TIME; テーブルT_AからIDに1が含まれるデータを全て抽出し、かつそれぞれのカウントを抽出し、かつ最新更新日でソートしたいと思います。 データ数が2000程度のテーブルで30秒ほどの時間がかかります。 より速くする良い方法はありますでしょうか?

    • ベストアンサー
    • MySQL
  • DISTINCTで選択した項目以外でのソート

    お世話になります。 SQLサーバ2000から、SQLサーバ2008への移行を行っております。 以下のようなSQL文は2000では許容されていたようで、問題なく(?)稼働していただのですが2008に移行したら軒並みエラーになってしまいました。 エラーで稼働確認が進まないので、修正方法を検討しているのですが、まだSQLサーバが使えない環境で確認ができません。 2000が来てから確認する予定ではありますが、以下の通りで新旧・同様のソート順になると考えて問題ございませんでしょうか。 教えていただけると幸甚です。 【例1】 SELECT DISTINCT ISNULL(T1.C1,""),T1.C2 FROM T1 ORDER BY T1.C1 →ORDER BY 項目を ISNULL(T1.C1,"")に変更 【例2】 SELECT DISTINCT T1.C1,T1.C2 FROM T1 ORDER BY T1.C1,T1.C3 →ORDER BY 項目から T1.C3 を削除する 以上です。宜しくお願いいたします。