• 締切済み
  • すぐに回答を!

これを抽出するSQLを教えてください

どういうSQLを書けばこれが実現出来るのか分からないので教えて下さい。 テーブル名 f_table というテーブルがあります。 このテーブルには、f_id,u_id,day(日付)という三つの列があり、下記のようにデータが入っているとします。 f_id  u_id    day   1    1   2007/3/8 2    2   2008/1/2 3    2   2008/1/10 4    1   2007/2/12 このf_tableから、各u_idで一番日付の新しいf_idを抽出する(この表の場合f_idの1と3が抽出される)にはどういうSQLで出来るのでしょうか? ※実際の表ではu_idに入っている数字の種類は1と2だけではなく、もっと沢山あります。 ご回答よろしくお願いします。

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数66
  • ありがとう数0

みんなの回答

  • 回答No.2

f_idを取りたいなら、 select f_table.f_id from f_table,( select u_id,max(day) as day from f_table group by u_id) b_table where f_table.u_id = b_table.u_id and f_table.day = b_table.day コレでいけるのではないでしょうか。 検証できる環境がないので自信はありませんが。

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • 結合して余りを抽出したい

    こんにちは。SQL文についてお教えください。 TABLE AとTABLE Bがあります。両テーブルにはIDというフィールドがあります。 データは下記のように入っているとします。 TABLE A ID:1,2,3,4,5 TABLE B ID:1,2,3 SQL文を実行した時、4,5を抽出したい。 二つのテーブルを比べ、片方のテーブルにないものを抽出したいと思っています。 つまり、TABLE A - TABLE Bを行い、余ったIDのみを抽出したいと思います。 内部結合は理解したのですが、これではできません。どうすれば解決できるのかお教え頂けませんでしょうか? よろしくお願い致します。

  • SQL文を教えてください。

    特定の日付Xを指定した場合、 以下のような結果になるSQL文を教えてください。 よろしくお願いします。 1) 日付X = 2003-12-17 の場合 ID table_A_DATE table_B_DATE table_C_DATE ------------------------------------------------ 001 2003-12-10 2003-12-12 2003-12-14 002 2003-12-15 ---------- 2003-12-16 003 2003-12-06 2003-12-10 ---------- 004 2003-12-08 ---------- ---------- 2) 日付X = 2003-12-11 の場合 ID table_A_DATE table_B_DATE table_C_DATE ------------------------------------------------ 003 2003-12-06 2003-12-10 ---------- 004 2003-12-08 ---------- ---------- table A(テーブルAには全ユーザのデータがあります) ID DATE ------------------ 001 2003-12-10 002 2003-12-15 003 2003-12-06 004 2003-12-08 table B ID DATE ------------------ 001 2003-12-12 003 2003-12-10 table C ID DATE ------------------ 001 2003-12-14 002 2003-12-16

  • 【Access】条件に該当する日付のレコードを抽出する方法について

    下記のテーブルがある場合、2002/03/10と入力すると、 ID=2のレコードを抽出したいのですが、やり方がわかりませんでした。 【テーブル(TABLE)の中身】 ID 開始日付  終了日付 1 2001/01/11 2002/02/12 2 2002/02/11 2002/03/12 3 2003/03/11 2002/04/12 テーブルの日付の列が1つ、入力する日付が2つの場合、 Betweenを使えばよいと思うのですが、 テーブルの日付の列が2つ、入力する日付が1つで、 テーブルの開始日付と終了日付の間に入力日付がある列を抽出する場合、 どうすればよいか分かりませんでした。 その為、何か良い手をご存知の方がいらっしゃいましたら、アドバイスをいただければと思います。 よろしくお願いします。

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

dayがdate型であれば、ぶつうに・・・ select u_id,max(day) as day from f_table group by u_id とかでいけます。

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • 毎日DBのデータをCSVに抽出したい

    タスクスケジューラで定期的に「SQL」を発行させてデータをCSVファイルにはきだしたいと思っています。 対象のdbがOracle、DB2、MySQLです。 悩んでいることが2か所あります。 抽出条件のSQLはSQLファイルに書いて簡単に実現できるのですが、 ・毎日CSVを作るためファイル名に日付を入れたい ・抽出条件に特定の日付を入れたいのですが対象のテーブルでは日付を日付型でもっておらず文字列です 例:20110206 どのようにすればいいでしょうか? ひとつのSQLファイル内で実現は不可能でしょうか?

  • 連日となっているセルを抽出するには?

    翌日の日付を抽出する方法があれば、教えていただけますでしょうか。 A列に、数字3ケタが並んでいます。 この数字が同一の行=(A1~C3)のデータの中から C列とB列の日付が翌日になっている行を探し出したいです。 下記の場合は、 C1(13/12/31)とB2(2014/1/1)が連日、翌日となっている。 C2(2014/12/31)とB3(2015/1/1)が連日、翌日となっている。 上記の場合、連日となっている「4つのセル」を全て絞り出したいです。    A  B   C 1  123  2013/1/1 2013/12/31 2  123  2014/1/1 2014/12/31 3  123  2015/1/1 2015/12/31 ―----------------- 4  456  2013/1/1 2013/12/31 5  456  2013/1/1 2013/12/31 A列の 数字は2700種類程あり、エクセルデータは1万行程度となります。 マクロや関数など、ヒントだけでも知りたいので、 分かる方教えていただけると嬉しいです。

  • [SQL]重複内容を持つデータから1件抽出かつ複数のカラムを表示したい

    [SQL]重複内容を持つデータから1件抽出かつ複数のカラムを表示したい 初めてお世話になります。 データベース種別はH2です。 参考:http://www.h2database.com/html/main.html 下記のようなテーブルAがあるとします。   ID  |  TAG  | ―――――+―――――|   1   |  abc   |   1   |  def   |   1   |  ghi   |   2   |  abc   |   2   |  ghi   |   3   |  abc   |   3   |  def   |   3   |  ghi   |   4   |  abc   | 上記テーブルAから下記例のような結果を得られるSQLを知りたいのです。   ID  |  TAG  | ―――――+―――――|   1   |  abc   |   2   |  abc   |   3   |  abc   |   4   |  abc   | 上記結果でなくとも、   ID  |  TAG  | ―――――+―――――|   1   |  def   |   2   |  ghi   |   3   |  def   |   4   |  abc   | であっても構いません。(TAG列のデータはどんな内容でもよいです。) 実現させたいのは、 (1)ID列が重複しない結果を表示させたい、 かつ (2)TAG列も表示させたい ということです。 これでイケるだろ!と思ってあえなく失敗したSQLは下記です; select distinct(ID), TAG from A 宜しくお願い致します。

  • SQLの結合条件について

    SQLの結合条件について ・table_A ID | ATAI 01 | AAA 01 | XXX 02 | ABC 03 | DEF table_B ID | ATAI 01 | 不要 02 | 必要 03 | 必要 04 | 不要 上記のようなテーブルAとBがあるとします。 やりたいこと 1.テーブルAに存在するIDをBのIDから抽出 2.テーブルAの「ATAI」の値が’AAA’のIDは抽出対象から外す。 ※テーブルAの01IDに’AAA’と’XXX’がありますが、Bの抽出対象から外したい。 2.がうまくいきません。 select B.ID from table_A A,table_B B where A.ID = B.ID 上記のSQLに2.の条件を足して、結果を02と03にしたいです。 ※CASEは使わずにお願いします。

  • SQL 完全に一致したデータを検索抽出

    SQLのテーブルから完全に一致したデータを抽出するにはどうすればよいでしょうか。 仮に、dayとweatherの2つのカラムでテーブルを作成 <?php /* 検索フォーム */ ?> <form action = "index.php" method="post">           <table> <tbody> <tr> <th>月</th> <th>天気</th> </tr> <tr> <td><input type="text" name="day"></td> <td><input type="text" name="weather"></td> </tr> </tbody> </table> <input type="submit" name="submit" value="検索"> </form> <?php /* 検索 */ ?> <?php &#65374;略&#65374;(SQLを呼び出す) $pdo = connect(); $st = $pdo->query("SELECT * FROM table WHERE day LIKE '%" . $_POST["day"] . "%' ); $word = $st->fetchAll(); ?> とします。 カラム「day」の中に「2」「12」「25」のデータが入っていたとします。 この場合、検索フォームで「2」と入力して検索すると 「2」「12」「25」全てのデータが抽出されます。 そうではなく、「2」のデータだけが抽出されるにはどうしたらよいでしょうか? 検索フォームを作る時は、上記のLIKEを使ったものしか知らないので、困っております。 何卒よろしくお願いします。

    • ベストアンサー
    • MySQL
  • SQLについて

    SQLについてですが、例えば下記のような表があり、 表. no name etc 0001 aaaa 1 0002 bbbb 1 0003 cccc 2 0004 dddd 1 この表から、「etc = '1'」の列を抽出すると、3件が返ってきますが、 その返ってきたデータの一番最後のデータのみを抽出したい場合はどのようにすればよいのでしょうか? (no = 0004 and etc = 1以外の方法でお願いします。。)

  • データの無いテーブルと結合してデータ抽出

    以下のテーブルを使用してデータを抽出したいのですが、データが抽出できません。 名称テーブル -------------------- ID | NAME | -------------------- 0   AA 1   BB 2   EE 3   FF 履歴テーブル -------------------- ID | DAY | OLDNAME -------------------- 2   2004   CC 3   2004   DD 結果取得したいデータ -------------------- ID | NAME | OLDNAME -------------------- 0   AA =現在のSQL= SELECT A.ID, A.NAME, B.OLDNAME FROM 名称 A , 履歴 B WHERE A.ID = B.ID(+) AND A.ID=0 AND B.DAY =  (SELECT MAX(C.DAY)  FROM 履歴 C  WHERE  A.ID = C.ID(+)) 履歴テーブルには名称テーブルの履歴があります。 履歴にデータが無くても名称データを取得したいのですが、こういった場合はどのようなSQLを作ればいいのでしょうか。

  • SQLの書き方がわかりません

    下記テーブルが access上にあります。 t1 ID 日付 01 2011/8/1 01 2011/9/1 02 2011/3/1 03 2011/5/30 t2 ID 日付 01 2011/7/1 01 2011/7/30 01 2011/8/1 01 2011/8/2 01 2011/9/2 02 2011/2/11 02 2011/3/1 02 2011/8/1 03 2011/4/30 03 2011/5/29 03 2011/6/30 このデータからt1を元に ID 日付1 日付2 01 2011/8/1 2011/8/1 01 2011/9/1 2011/8/2 02 2011/3/1 2011/3/1 03 2011/5/30 2011/5/29 というデータを取得するにはどのようなSQLを書けばよいでしょうか。 具体的にはt1とt2のIDが同じで、 t2の日付がt1の日付以下で最大のレコードと紐付けたいのです。

  • SQLの相談

    SQLの相談です。 以下のようなテーブルについて CREATE TABLE `record`( `id` INT, `timestamp` TIMESTAMP, `point` INT ); 1) id毎に最新5件のデータを抽出 2) 合計pointが420以上のidだけを抽出 したいのですが…。 1)の処理について、うまい解決策を思いつきません。 助言をお願いします。

  • sql 集計結果の抽出方法を教えてください

    金額テーブル(会社名、金額)と詳細テーブル(会社名、日付、金額)があり 金額テーブル A社 100円 詳細テーブル A社 2011/1/1 10円 A社 2011/1/2 10円 A社 2011/1/3 50円 A社 2011/1/4 20円 A社 2011/1/5 10円 A社 2011/1/6 10円 詳細テーブルの金額を一件づつ合計していき、金額テーブルの金額を超えた時の 詳細テーブルの日付を抽出するSQLを教えてください。 上記データの2011/1/5を抽出したいのです。 宜しくお願いします。