複数のidの、すべての最新値を求めたい

このQ&Aのポイント
  • 複数のidの、すべての最新値を求める方法を解説します。
  • DBに登録されているデータから、各IDの最新日のcostを抽出する方法を詳しく説明します。
  • UNIX TIMEを使用して、最新のcostを取得する手順について解説します。
回答を見る
  • ベストアンサー

複数のidの、すべての最新値を求めたい

以下のようにDBに登録されています。 id date cost 129 1404313200 6000 76 1404313200 5000 129 1404226800 4000 54 1404226800 75000 129 1404226800 55000 日付はUNIX TIMEです。 各IDの、最新日のcostを抽出したいのですが、どのようにすればいいでしょうか。 上記だと 76 1404313200 5000 54 14042268007 5000 129 1404313200 6000 が抽出される方法を知りたいです。 (ID129のdateが1404313200で一番大きい=最新) よろしくお願い致します。

  • umioyo
  • お礼率78% (172/220)
  • MySQL
  • 回答数1
  • ありがとう数5

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

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

実用にはidとdateの組み合わせがユニークであるという条件が必要ですね 処理的にはこう select * from tbl where (id,date) in (select id,max(date) from tbl group by id);

umioyo
質問者

お礼

ありがとうございます。 現状はユニークでない場合もありえるので、ユニークになるように調整してから試したいと思います。

関連するQ&A

  • 同じ日付で複数数値がある場合の最大値取得

    以下のような形でDBに登録されています。 id date cost 129 1404313200 6000 76 1404313200 5000 129 1404226800 4000 54 1404226800 75000 129 1404313200 55000 id 129のものをすべて抽出したいのですが、もしdateが同じだった場合は、同じdateの中でのcostの最大値の行だけ抽出したいです。 このようなことは可能でしょうか。 上記の例でいうと、 129 1404226800 4000 129 1404313200 55000 が取得できればOKです。 あまりmySQLは詳しくないのでselect文でそのまま頂けると嬉しいです。 よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • Access 最新から2件分の日付

    色々と調べたのですが、データが思い通りにならなく困っております。 テーブルの新しい日付から2件を表示したいのですがわかりません。 以下のようなデータがあるのですが ID 日付 1 2009/09/15 1 2009/09/09 1 2009/09/02 2 2009/09/15 2 2009/09/09 IDごとに最新の日付を2件分抽出したいのです。 ID 日付 1 2009/09/15 1 2009/09/09 2 2009/09/15 2 2009/09/09 クエリで、上記のように実現するには、どのようにすればよいのでしょうか? ご指南頂けると助かります。宜しくお願い致します。 環境 OS:XP Access Version:2002

  • ACCESS 一番最新の日付の金額を出したいのですが・・

    社員ID/交通費/登録日 のフィールドがあるテーブルがあります。 社員ID/交通費/登録日 0001  800  2007/4/1 0002  400  2007/4/2 ・ ・ 0001 700  2007/5/2 となった場合、0001の人は700円と言う風に登録日が最新のものを抽出したいのですが クエリをつくり登録日の集計を「最大」にしてみたら、日付は5/2がちゃんと出ますが、金額がその登録日以外の金額になるのです。 どうすればよいでしょうか? 分かる方教えて下さい。宜しくお願いします。  

  • 1:Nの結合結果として最新日付のもので1:1としたい。

    Oracle9i Enterprise Edition R2の環境下で 以下のような2つのテーブルをを結合し [Output]の内容を抽出したいと思っております。 A table (顧客) **************************************** ID name A001 Robart A002 Todd B table (履歴) **************************************** ID name Date B001 A001 08/04/01 B002 A001 09/04/30 B003 A001 09/04/10 B004 A002 09/02/13 B005 A002 09/03/02 [Output] **************************************** A.name B.ID B.Date A001 B002 09/04/30 A002 B005 09/03/02 Aテーブル単位にBテーブルの最新日付の レコードを結合して抽出したいのですが、 MAX関数を使い試行錯誤しているのですが、 うまく行きません。どうか結合方法をご教示ください。 宜しくお願い致します。

  • 期間内のデータ抽出

    テーブル名:HOGE ID  DATE1     DATE2     FLG ------------------------------------------------------------ 001  2012-07-01  2012-07-15  0 002  2012-07-10  2012-07-20  0 003  2012-07-01  2012-08-01  0 004  2012-07-05  2012-07-19  1 005  2012-07-20  2012-07-31  0 006  2012-07-07  2012-07-15  0 で、本日の日付(2012年7月9日)がDATE1~DATE2に入る、かつFLGが0のレコードだけ抽出したいです。 上記の場合、 ID 001 003 006 この様に抽出したいのですが、宜しくお願い致します。

  • ZendFrameworkについて

    ZendFrameworkについて PHP・ZendFramework初心者です。 今DBに登録した日付けを表示したいと思っています。DBはMysqlを使用しています。 DBに登録した内容は、"2010-08-20 16-00-00"です。 index.phtml----------------------------- : : <?php foreach($this->date as $time){ ?> <td><?php echo date('Y年n月j日'$time->times)?></td> <?php } ?> ---------------------------------------- 上記のように表示を指定してみると、 1970年1月1日になってしまいます。 原因がよくわかりません。 どなたかDBに登録した内容を上記のフォーマット通りに表示する方法を おしえてください。 よろしくおねがいします。

    • ベストアンサー
    • PHP
  • 複数行の上位3位を1行に表示

    複数行の上位3位を1行に表示する。 分かる方がいれば教えて下さい。 OS:Windows7 DB:PostgresSQL 8.3 <参照デーブル> 品番  ID   金額    日付 1;    3;   1000000; "2012-08-31" 1;    2;   970000;  "2012-08-18" 1;    1;   970000;  "2012-08-10" 1;    4;   940000;  "2012-08-20" 2;    16;  300000;  "2012-08-25" 2;    13;  300000;  "2012-08-13" 2;    12;  250000;  "2012-08-10" 2;    15;  250000;  "2012-08-18" 2;    14;  200000;  "2012-08-15" 2;    11;  200000;  "2012-08-08" 上記の様なテーブルを、金額が高くかつ時間の速いもの順で、上位3位を1行に表示したいのですが、上手くいかずに困っています。 <抽出したい結果> 品番  ID1   金額1    ID2  金額2   ID3   金額3 1;    3;    1000000;  1;   970000;   2;   970000 2;    13;    300000;  16;  300000;   12;   250000 このように抽出しいたいのですが上手くいきません。 どなたか教えていただけいないでしょうか。 よろしくお願いします。

  • SELECT文で抽出時に複数カラムのソート方法についてご質問します。

    SELECT文で抽出時に複数カラムのソート方法についてご質問します。 開発環境は以下になります。 ・PHP Version 5.2.11 ・MySQL (5.0) そこでやりたいことです。 レストランの開店時間が、バラバラに入力されるとして 以下のデータがDBに格納されています。 TABLE `reserve` ID,NAME,DATE1,FLAG1,OPEN1,DATE2,FLAG2,OPEN2,DATE3,FLAG3,OPEN3 1,A店,2010-07-05,0,10:00,2010-07-06,1,12:00,2010-07-07,1,10:00 2,B店,2010-07-06,1,13:00,2010-07-07,1,13:00,2010-07-08,1,13:00 3,C店,2010-07-06,0,11:00,2010-07-07,0,11:00,2010-07-08,1,16:00 4,D店,2010-07-04,1,10:00,2010-07-05,0,10:00,2010-07-06,1,10:00 5,E店,2010-07-06,0,13:00,2010-07-07,1,11:00,2010-07-08,0,13:00 5,F店,2010-07-07,1,10:00,2010-07-08,0,10:00,2010-07-09,1,10:00 ・ ・ ・ 種別は ID:主キー NAME:VARCHAR DATE1~3:DATE FLAG1~3:INT OPEN1~3:TIME ※FLAG1~3は、0=店休日、1=営業日です。 ここから毎日の開店状態を、早い開店から順番に表示したいのです。 7月7日の開店状態を表示する場合の結果は 2010年07月07日 A店:10:00開店 F店:10:00開店 E店:11:00開店 B店:13:00開店 ・ ・ ・ このように、開店時間が早い順からソートして出力となります。 そこで以下のセレクト文で呼び出してみると抽出はうまくいきました。 SELECT * FROM `reserve` WHERE `DATE1` = '2010-07-07' AND `FLAG1` =1 OR `DATE2` = '2010-07-07' AND `FLAG2` =1 OR `DATE3` = '2010-07-07' AND `FLAG3` =1 しかし、ソートがうまくいきません。 ORDER BY `TIME1` , `TIME2` , `TIME3` ASC ORDER BY `TIME1` ASC , `TIME2` ASC , `TIME3` ASC ORDER BY `TIME1` `TIME2` `TIME3` ASC そこで、TIME1~TIME3をまとめてインデックスにしてみました。 でもうまくいかないです。 色々と試してみましたがうまくいきません。 根本的に間違えているのでしょうか? データを取り出してから、PHPでソートをかける方が良いのでしょうか? PHPでソートをするには、DBから取り出したデータを、連想配列に変換して ソートしてとなると思いますが。 抽出したデータを表示後、さらに店名でソートして再表示したりという ことを考えているので、出来ればSELECT文で実現したいと思い、 質問させていただきました。 ご教授いただければ幸いです。 何卒よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • 抽出後に最新10件出力

    検査日 ID データ1 データ2・・・ 8/19  1   ○    △ 8/19  2   △    ○ 9/10  4   ●    ▽ 9/10  5   ●    ▽ 9/23  3   ○    ▽ 9/23  1   □    ●   上記のようなデータベースがあります。(Excel) IDで抽出して、検査日最新10件のデータを別のシートに出力したいのですが、どうしたらできるでしょうか。 関数でもマクロでも結構ですので、ご存じの方いらっしゃったら教えて下さい。

  • SELECT文での抽出条件

    以下のような処理を行いたいと思いますが SQL文の作成方法を御教授下さい。 【時間DB】 YEARMONDAY,HOUR,FLG, DATA ----------------------------- 20050528     1  1 10 20050528     2  1 20 20050528     3  1 30 20050528     4  1 40 . . . 20050528    22  1 40 20050528    23  1 50 20050528    24  1 60 【日DB】 YEARMONDAY,FLG, DATA ----------------------------- 20050528     1  250 処理内容:指定された日付で日DBの作成を行う。 抽出条件:フラグが全て等しい場合はその値を取得       :フラグが一致しない場合は0を取得 上記の場合,SQL文で抽出可能でしょうか? 以上,よろしくお願い致します。