MySQLでID毎に最新の値を取得する方法

このQ&Aのポイント
  • MySQLを使用して、ID毎に複数のデータがある状態で、各IDの最新のデータのみを取得する方法について教えてください。
  • 会員管理用DBで、ID毎に複数のデータがある場合、最新の値のみを取得する方法について教えてください。
  • MySQLの会員管理用DBで、ID毎に複数のデータがある場合、各IDの最新のデータのみを取得する方法について教えてください。
回答を見る
  • ベストアンサー

ID毎に最新の値を取得する

はじめて質問させていただきます。 現在、MySQLを使って会員管理用DBを作成しており、以下のようなテーブルを作っています。 ID | Name | Address | UpdateDate 1 | A | 東京 | 2009-10-10 1 | A | 福岡 | 2009-10-11 2 | B | 東京 | 2008-09-02 このようなID毎に複数のデータがある状態で、各IDの最新のデータのみを取得したいのですが、方法がわからずにいます。 大変初歩的な質問かもしれませんが、方法をご存じの方どうかご教授ください。 また、素人なもので、質問の方法が悪いかもしれません。その場合、ご指摘いただければ幸いです。 よろしくお願いします。

  • MySQL
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>最新のデータのみを取得したい SELECT * FROM hoge WHERE (id,UpdateDate) IN (SELECT id,max(UpdateDate) FROM hoge GROUP BY id)

rmustang
質問者

お礼

ありがとうございます。 取得できました。 group by と in の使い方勉強になりました。 本当に助かりました。

関連するQ&A

  • PHPでMySQLに登録されているデータのMAXと他のフィールドからデータの取得

    PHPでMySQLの最新のデータを取得し、そのデータのデータ番号を取得しようとしています。 テーブルは ID(INT型、AUTO_INCREMINT) | name(VARCHAR型) | t_touroku(DATATIME型) 1 | test1 | 2005-12-1 12:11:10 2 | TEST2 | 2005-12-2 12:56:10 となっています。 ここから最新のデータt_tourokuを検索しそのデータのIDを取得したいのですが、どうにもうまいことできません。 この場合ですと、IDの2を取りたいんです・・・。 MAXを使えばいけると思ったのですが、最新のデータしか取得できずIDを取得できませんでした・・・。 どうか、お知恵を貸して下さい。 よろしくお願いします。 バージョンは PHP 4.3.10 MySQL 3.23.58 です。

    • ベストアンサー
    • PHP
  • 一度のsqlで値を取得するには

    mysql5です。 テーブル名pref(都道府県) id,name 1,北海道 2,青森県 3,秋田県 ・・・ テーブル名user(会員) id,pref_flg,addr01,addr02 1,1,市町村,それいかの住所 2,2,市町村,それいかの住所 3,3,市町村,それいかの住所 ・・・ 上記のようなテーブルであるとした場合userをselectしデータを取得します。 SELECT id, CONCAT(pref_flg, addr01, addr02) AS addr FROM user WHERE id = ? この結果addrには『1(※都道府県id)市町村それいかの住所』で取得できるのですが 一度のsqlで都道府県名も取得するにはどうすればできますか? 具体的には 『1(都道府県id)市町村それいかの住所』 を 『都道府県名市町村それいかの住所』 としてidではなく名称で取得したいです。 単純にuserに都道府県名を入れればできるのですが上記のように複数のテーブルで管理する場合の 方法を教えてください。

    • ベストアンサー
    • MySQL
  • 値が「1」のカラム名を求めたい。

    任意の列の、値が「1」のカラム名を求めるにはどうしたらいいでしょうか? PHP Version 5.1.6 MySQL - 5.0.45 で運用しています。 そもそものテーブルの作り方がおかしいのかも知れませんが、 以下のようになっています。 このテーブルで、IDが「40」の列の値が「1」のカラム名を求めたいのです。 どの様にしたらいいでしょうか? ※カラム名「会員番号110」は実際は整数になっています。 ID  会員番号110  会員番号111  会員番号112  会員番号113  40  1       1       0       1       41  0       1       1       1   $sql ="select * from `member_sub_tbl` where `ID`='$ID'"; $result = mysql_query($sql, $con); //カラムの数を取得する $numFields = mysql_num_fields($result); for($i=0;$i<$numFields;$i++){ $nameFields[] = mysql_field_name($result, $i); } print_r($nameFields); これで、カラム名は全て配列に入るのですが、値が「1」のと限定する方法がわかりません。 ご教授、よろしくお願いいたします。    

    • ベストアンサー
    • PHP
  • メインデータと最新サブデータのテーブル結合について

    お世話になっております。 MySQL4.1にて以下のようなデータを取得したいと考えています。 1回のSQLで何とかとりたいと考えているのですが、 良いお知恵はないでしょうか? ▼Aテーブル ID(PK) メインメモ ▼Bテーブル ID(PK) 日付(PK) サブメモ ▼取得したい結果 ID(1) メインメモ 最新サブメモ ID(2) メインメモ 最新サブメモ ID(3) メインメモ null ・「メインメモ」と「サブメモ」は1対多の状態です。 ・IDごとに1行だけメインメモと最新のサブメモを取得したい。 ・サブメモがなくてもメインメモだけでも取れる。  (Aテーブル LEFT OUTER JOIN Bテーブルの関係) 上記の条件でデータを取得したいと考えております。 よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • 取得する順番

    mysq初心者です 値の取得する順番を変えないで、値を取得する方法はありますか? 会員IDが5、1、3で取得したいのですが1、3、5に並び替えられてしまいます テーブルはIDとNAMEのみ、重複なしで、ID番号と名前番号が一致しています sprintf('SELECT id FROM hoge2 WHERE name="%s" or name="%s" or name="%s" ', ほげ5, ほげ1, ほげ3 ); $recd = array(); while ($rec = mysql_fetch_assoc($sql2)) { $recd[] =$rec['id']; }

    • ベストアンサー
    • MySQL
  • 2つのテーブルを結合する際にIDを割り当てたい

    PHPでmySQLを作成しています。 現在学習中なのですが、自己解決できない問題が発生したのでどうかお知恵をお貸しください。 --- 同じデータベースにTableAとTableBがあります。 中身は下記のようだとします。 TableA      |  TableB id  name time | name time :   :   :  |  C1   D2 101 A1  B1  |  C2   D2    102 A2  B2  |   :    : 103 A3  B3  |  C20  C20 --- テーブルAのカラムid、name、timeの3カラム、テーブルBはname、timeの2カラムです。 これを --- TableA        TableB id  name time  name time :   :   : 101 A1  B1 102 A2  B2 103 A3  B3 104 C1  D1 105 C2  D2 :   :   : 123 C20  D20 --- とするような方法を教えてください。(TableBはレコードなし) テーブルの結合ではIDが割り当てられず、上手な方法が思いつきません。 どうかご教示のほど、よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • 2つのテーブルにあるIDを1つのID(item_id)?にしたいです。

    2つのテーブルにあるIDを1つのID(item_id)?にしたいです。 このやり方は間違ってますか? ご指摘よろしくお願いします。 車テーブル car_id name  maker price 1   スープラ トヨタ 100 2   スカイライン 日産 100 食べ物テーブル food_id name price 1 リンゴ 100 2   バナナ 100 アイテムテーブル item_id car_id(外) food_id(外) 1 1 NULL 2 2 NULL 3 NULL 1 4 NULL 2

  • 参照先に値が無い場合空欄にするテーブル結合を作る

    初歩的な質問ですみません table:A +------------+-------------+ | id | status_id| +------------+-------------+ | 1 | 1 | | 2 | 2 | | 3 | 1 | | 3 | 2 | +------------+-------------+ table:B +------------+-------------+ | status.id | name| +------------+-------------+ | 1 | そば | | 2 | うどん | +------------+-------------+ みたいなテーブルがあるとすると、 +------------+-------------+------+ | A.id | B.status_id| B.name | +------------+-------------+------+ | 1 | 1 | そば | | 1 | 2 | NULL | | 2 | 1 | NULL | | 2 | 2 | うどん | | 3 | 1 | そば | | 3 | 2 | うどん | +------------+-------------+------+ 結合して上の表のようにしたいのです どうかお力をお貸しください

    • ベストアンサー
    • MySQL
  • 複数テーブルからのデータ取得

    MySQLで 4つのテーブルからデータを取得する方法を教えてください。 4つのテーブルの構造は全く同じです。 構造的には id・・・int name・・・varcher(30) point・・・int start・・・datetime end・・・datetime tableA,tableB,tableC,tableDの4つのテーブルからpointのデータを昇順に取得したいです。 よろしくお願いします。

  • Filemaker 最新フィールド値の取得

    Filemaker Pro12で、AテーブルのフォームにBテーブルのポータルを作っています。 Bテーブルの「使用期限までの日数」というフィールドの最新値だけポータル内ではなく、Aテーブルのフォームにオブジェクトとして表示したいのですが、どうしても最古のフィールド値しか表示できません。 どうすれば、最新値が表示されるでしょうか。 どなたか教えてください。 Aテーブル 製品ID 製品名 発注先 Bテーブル 製品ID 使用期限 発注日 納品日 使用期限までの日数(今日から使用期限までの日数を計算式で数値として表示) AテーブルとBテーブルは製品IDでリレーションを組んでいます。