• ベストアンサー
  • 困ってます

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の日付以下で最大のレコードと紐付けたいのです。

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

  • 回答数1
  • 閲覧数166
  • ありがとう数1

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

  • ベストアンサー
  • 回答No.1

説明文通りにSQLつくればいいと思いますが。。。 >t1とt2のIDが同じで、t2の日付がt1の日付以下 t1.ID = t2.ID and t1.日付 >= t2.日付 で結合 >最大のレコード t1.ID, t1.日付で集約してMax(t2.日付) --- SELECT t1.ID, t1.日付 AS 日付1, Max(t2.日付) AS 日付2 FROM t1 INNER JOIN t2 ON t1.ID = t2.ID and t1.日付 >= t2.日付 GROUP BY t1.ID, t1.日付;

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

質問者からのお礼

ありがとうございます。 何か変に難しく考えてしまったようです。 そのものズバリ取得できました

関連するQ&A

  • SQLの書き方

    はじめまして SQL Serverを使用していますが、下記のSQLの書き方がわかりません。 申し訳けありませんが、わかる方がいらっしゃいましたら、どなたか教えて下さい。 ◆質問 テーブル1とテーブル2の下記のKEYで結合させて、取り出した結果でテーブル3を更新したいです。 テーブル2はデータが複数件一致してしまうため、無条件に先頭の1レコードだけを取り出したいです。 取得できたテーブル2のid_1とid_2とid_3をテーブル3に書き出したいです。 ○KEY テーブル1.test = テーブル2.test and テーブル1.test1 = テーブル2.test1 テーブル1.id_2 = テーブル3.id_1 and テーブル1.id_3 = テーブル3.id_2 ○テーブル1 id_1   id_2   id_3   test   test1 bbb   000001   001   000001  100 bbb   000002   001   000002  100 ○テーブル2 id_1   id_2   id_3   test   test1 aaa    1    99    000001   100 ← このレコードを取り出したい aaa    2    99    000001   100 aaa    3    99    000003   100 aaa    4    99    000004   110 ○テーブル3 id_1   id_2   id_3 000001  001  aaa-1-99   ←id_3にテーブル2で取得できたid1 + id2 + id3を書き出したい 000002  001 夜遅くにすみませんがお願いします。

  • SQL文 複数条件の場合の書き方

    初めて質問します。 下記のようなデータが存在します。 テーブルA NO DATE GYO 1 2010/12/01 1 1 2010/12/01 2 2 2010/12/01 1 2 2010/12/01 2 2 2010/12/01 3 3 2010/12/02 1 <= 4 2010/12/03 1 4 2010/12/03 2 上記データにて、<=の行の値を取得し変数へ代入したとします。 変数.NO =3 変数.日付 =2010/12/02 変数.GYO =1 上記、変数を元に1件前のレコードを抽出したいのですが SQL文でのいい方法がわかりません。 取得したいレコード 1 2010/12/01 1 1 2010/12/01 2 2 2010/12/01 1 2 2010/12/01 2 2 2010/12/01 3 どうかお願いいたします。

  • SQLの書き方

    テーブルA ○id data テーブルB ○subId id userId ○は、プライマリ 上記のようなテーブルがあります。 テーブルBのuserIdと テーブルAのid(=テーブルBのId)を指定して テーブルA,Bのデータを取得したいです。 ただし、テーブルBに該当データ(指定したuserId)に該当する データがない場合、テーブルAのデータのみ取得したいと考えています。 一発のSQLで取得できますでしょうか? ご教示お願いいたします。

  • [ACCESS97]SQLの書き方

    グラフのレコードソースにクエリ・SQLを使用しています。データ入力チェックに使おうと思っています。妙なデータがはいった場合、グラフが乱れるのではないかと。 ソートは日付でしています。 それで、100レコードずつを順番に表示していきたいのですが、top値 だと最初からいくつ、、としか指定できません。これを、レコードの途中の任意の位置から取るにはどうしたらいいのでしょうか? IDとかのようにユニークな値でソートしているのであれば、大小関係で一発ですが、同じ値がいくつも存在する日付なもので困っています。 日付でソートしたものを配列に入れる、もしくは一度テーブルに書き出す等も考えているのですが、SQLでできたら助かります。 よろしくお願いします。

  • SQL SEREVER で選択した固定値との結合について質問です。

    SQL SEREVER で選択した固定値との結合について質問です。 日付と紐付けたデータを1ヶ月分出力するSQLを作成しています。 紐付け対象となるデータに、1ヶ月毎日のデータが存在するわけではありません。 そこで、固定値として2010年7月であれば、 2010-07-01~2010-07-31 までの日付を全て固定値として取得 (対象データは行で取得したいのでUnionで繋いでいく)して、 その日付と紐づく対象データを外部結合しようと考えました。 SqlServerの場合、固定値のみを取得した場合 ダミーテーブルを使用するということができないようなので、 取得した固定値との紐付け時に下記???のところの指定がわかりません。 Select '2010-07-01' 日付 Left Join 結合対象テーブル On 結合対象テーブル.日付 = ???.日付 他のやり方で実現可能なのかもしれませんが、調べてもわかりませんでした お解りになる方いらっしゃいましたら、教えていただければと思います。

  • SQLの書き方

    以下の条件を取得したいのですがどのようなSQLを組めばいいか悩んでます。 テーブルA(列はC1,C2,C3,C4 PKはC1,C2です。) ■テーブルAのデータ C1  C2   C3   C4 1   1   50   備考1です。 1   2   75   備考2です。 2   1   25   備考3です。 3   1   75   備考4です。 3   2   90   備考5です。 3   3   50   備考6です。 ■取得したい結果 C1  C2   C3   C4 1   2   75   備考2です。 2   1   25   備考3です。 3   2   90   備考5です。 ■取得したい条件 C1でグルーピングしたなかでC3の値が一番大きな行を取得する。 現在は以下のようなSQLを書いています。 SELCT T1.* FROM テーブルA T1, (SELECT C1,MAX(C3) AS C3MAX FROM テーブルA GROUP BY C1) T2 WHERE T1.C1 = T2.C1 AND T1.C3 = T2.C3MAX もう少し簡単なSQLで出来そうですが、うまく思いつきません。 宜しくお願いします。

  • これを抽出する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だけではなく、もっと沢山あります。 ご回答よろしくお願いします。

  • SQLで1つのレコードから複数行挿入するには

    下記のようなレコードがあります。 node_id_1 node_nm_1 node_id_2 node_nm_2 ------------------------------------- 00001   AAAA    00002   BBBB 00003   CCCC    00004   DDDD このレコードを元に下記のようなデータを別テーブルに挿入したいのですが、SQLで可能でしょうか id node_id node_nm ----------------- 1  00001  AAAA 1  00002  BBBB 2  00003  CCCC 2  00004  DDDD idはシーケンスで取得します。そして、同一レコードだったものには同じidを振ります。 DBはPostgreSQL 8.4です。

  • 複数のテーブルから値を合計出力するSQLについて

    複数のテーブルから値を合計出力するSQLについて 以下の様な3つのテーブルがあり、それぞれのテーブルから値を合計した結果を取得したいと思っております。 この場合のSQL文をご教授いただけないでしょうか? 拙い説明でお分かりに難いかと思いますが、何卒、宜しくお願いします。 ●テーブル t1(テーブル1) id, 会員ID, 日付, 金額 t2(テーブル2) id, 会員ID, 日付, 金額 t3(テーブル3) id, 会員ID, 日付, 金額 ●期待する結果 上記、テーブル内の会員ID、日付が同じものの金額を合計して取得。(1行で出力) いずれかのテーブルに「会員ID」が一つしか存在しない場合も、「日付」、「金額」を取得して「合計金額」に反映。 もし、各テーブル、レコードの「金額」が「0」または「null」の場合は「0」として処理する。 ●期待出力結果イメージ 会員ID | 日付 | 合計金額 | -------------------------------- m001 | 2011/07/20 | 1500 | -------------------------------- m001 | 2011/06/10 | 2000 | -------------------------------- m002 | 2011/06/05 | 1000 | -------------------------------- m003 | 2011/05/25 | 0 | -------------------------------- m001 | 2011/03/05 | 3000 | ※「合計金額」は、「t1(テーブル1)」&#65374;「t3(テーブル3)」の中に含まれていた金額の合計。

    • ベストアンサー
    • MySQL
  • SQLの書き方について

    (1)の様なテーブルから結果を(2)の様にしたいのですが どのようなSQLを書いたら表示できるのかわかりません。 アドバイスなどをお願い致します。 (新たにView等を作成するなどでもかまいません。) (1)dept_id / item_id / day / time (カラム) 1111 / 0001 / 20090101 / 60 (レコード1) 1111 / 0001 / 20090102 / 30 (レコード2) 1111 / 0002 / 20090101 / 40 (レコード3) 1112 / 0001 / 20090101 / 30 (レコード4) (2)dept_id / item_id / time1 / time2 1111 / 0001 / 60 / 30 1111 / 0002 / 40 / 1112 / 0001 / 30 /