• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:同一コード毎に最新の名称を取得するSQL)

同一コード毎に最新の名称を取得するSQL

原沢 信道(@nharasawa)の回答

回答No.2

SELECT * FROM テーブル T1 WHERE 有効期間開始日=(SELECT MAX(有効期間開始日) FROM テーブル T2 WHERE T1.コード = T2.コード AND T1.区分 = T2.区分) AND 有効期間終了日=(SELECT MAX(有効期間終了日) FROM テーブル T2 WHERE T1.コード = T2.コード AND T1.区分 = T2.区分 AND T1.有効期間開始日=T2.有効期間開始日) ORDER BY 1,3 です。

kamakuragengorou
質問者

お礼

先の質問に続き、回答ありがとうございます。 確認してみて意図したとおりに動作しました。 正直前回に引き続き、今回もどのようなSQLにすればスマートなのか思いつかなかったのですが、すごいと思います。 SQL作成において、どのようにアプローチしていますでしょうか。 もしよかったら、教えて頂けるとうれしいのですが。。。 宜しくお願いします。

関連するQ&A

  • 指定した区分と一致するコードは取得しないSQL

    いつもお世話になります。 以下のデータ構成で、区分に「A01」「D01」のいづれかが含まれているコードは 取得しないようにしたいのですが、これを、SQLのみで実現するためにはどのように すればよいでしょうか。 【テーブル】 コード 区分 10000  A01 10000  B01 10000  C01 20000  C01 20000  D01 30000  B01 30000  E01 40000  B01 40000  E01 40000  F01 ↓ 【結果】 30000 40000 ※コード10000はA01が含まれており、20000はD01が含まれているため対象外 普通のプログラムならば、全て取得してきて、ループしながら該当する区分の場合は continueするなりしてはじけばい、というように想像できるのですが、SQLのみでやるということで、 ループ処理は行えないためどうしてもスマートな方法が思いつきません。 何かよい方法はないでしょうか。 宜しくお願いします。

  • SQLの作成について

    SQLの作成について 以下のようなDBがあるとします。 ---------------------- DB1(マスタ)  区分   フラグ  名称   A    1    男   A    2    女   B    1    車   B    2    飛行機   B    3    電車   C    1    コンビニ   C    2    スーパー   C    3    百貨店   D    1    デスクトップ   D    2    ノート ---------------------- ----------------------- DB2  区分1 フラグ1 名称1 ・・・ 区分4 フラグ4 名称4   A   2           D    1 ----------------------- DB2の区分とフラグから、DB1を参照して 取ってきたDB1の名称をDB2に書き込みたいです。 名称の1つ毎に、SQLを発行し、それぞれ名称を取得するなら where DB1.区分=DB2.区分 and DB1.フラグ = DB2.フラグ みたいな感じでそのまま出来ると思いますが、 今は、1つのSQLでDB2の複数の名称を一気に取得したいと考えてます。 どのようなSQLが良いのでしょうか

  • SQLの作成について

    以下のSQLが作りたいのですが 作れなくて困っています。 有識者の方、お助けください。 環境:SqlServer2008 ★詳細説明 テーブルA、B、Cがあるとします。 A-B 1対1 B-C は1対N A,B,Cは全て検索・表示対象になります。 A-Bに対する検索表示は問題ないのですが Cの発送区分(1:未発送 2:発送済み)を検索条件と するSQL作成に悩んでおります。 ★テーブル・構成データ A 年度 顧客CD 顧客名称 2010 1000 A社 2010 1001 B社 2010 1002 C社 2010 1003 D社 B 年度 顧客CD サービス開始日 2010 1000  2011/04/1 2010 1001  2011/04/2 2010 1002  2011/04/3 2010 1003  2011/04/4 C 年度 顧客CD 部署 発送区分 発送日 2010 1000 A 1 2010 1001 A 1 2010 1001 B 2 2010/10/11 2010 1001 C 2 2010/10/12 2010 1003 D 1 2010 1003 D 2 2010/10/20 ★実現したいSQL 1.発送区分に検索条件を設定しない場合   年度 顧客CD 発送区分 発送日   2010 1000 1   2010 1001 2 2010/10/12   2010 1002 1   2010 1003 2     2010/10/20 2.発送区分を未発送   年度 顧客CD 発送区分 発送日   2010 1000 1   2010 1002 1 3.発送区分を発送済み   年度 顧客CD 発送区分 発送日   2010 1001 2 2010/10/12   2010 1003 2 2010/10/20 1~3を1回のSQLで実行したいのですが 実現できておりません。 よろしくお願いします。

  • mdbからのデータ取得をSQLで行いたいのですが・・・

    VB.NETで開発中です。 “TEST”という名称のmdb(MS-Access)のDBに接続し、“区分マスタ”というテーブルからデータを取得したいのですが、これをSQL文で行いたいと思っています。 サンプル的なコードを記述して教えていただけると助かります。 よろしくお願い致します。

  • SQLで最新の3件分の統計をとりたい

    お世話になります。 Access2000のSQLを使用しています。 下記のテーブルAから、最新の3件分の結果を取得したいのですが、 どのようにSQLを作成すればよいでしょうか? 誠に勝手ですが、SQL文で回答頂ければ助かります。 ※クエリでも結構ですので教えて頂ければと思います。 以上宜しくお願い致します。 --テーブルA-- 日付  名前 2013/6/1 A 2013/4/1 B 2013/7/1 C 2013/3/1 D --結果B(最新の日付の3つ-- 2013/7/1 C 2013/6/1 A 2013/4/1 B

  • SQLの抽出方法について

    約管理みたいな事をしております。 下記のように予約表があります。 区分-開始-終了 A-09:00--10:00 B-10:00--12:00 A-15:00--17:00 A-20:00--22:00 区分別に開始と終了時間(範囲内かどうか)を取得したい 区分Aに対して16:00-16:30は重複と判定し 区分Aに対して08:00-09:30は重複と判定し 区分Aに対して17:00-18:00はOK 区分別に時間が重複しているかどうか 取得できるSQL分を教えてください。

  • SQLで質問があります。

    すみません。初めて質問させて頂きます。 以下のような条件のSQL生成は可能でしょうか。 可能な場合どのようなSQLになるかご教授頂けないでしょうか。 <条件> テーブルA,B,Cで一致する社員コード AND テーブルAの年月日がnull AND テーブルBの区分コードが"01"以外 AND テーブルCの部門コードでテーブルDを検索し 取得した会社コードが"00001" <取得したい項目> テーブルA.社員コード テーブルA.社員氏名 テーブルC.区分コード <テーブルA> 社員コード* 会社コード 年月日 社員氏名 <テーブルB> 社員コード* 会社コード 区分コード <テーブルC> 社員コード* 会社コード 部門コード <テーブルD> 会社コード* 部門コード* *は主キー よろしくお願い致します。

  • MAX値を条件にデータを取得するには?

    SQL文で困っています。 ご教授下さい。 下記のようなデータがあった場合、それぞれの区分毎に 年月が最大(最新)のデータを取得したいです。 (実際には1レコードにその他項目があり、それらも取得します。) <検索対象データ> 区分 年月   金額 ----------------------------- A   200412  600 A   200503  560 B   200311  600 B   200508  1000 B   200504  560 C   200508  400 C   200301  1100 <取得したいデータ> 区分 年月   金額 ----------------------------- A   200503  560 B   200508  1000 C   200508  400 よろしくお願いします。

  • SQL

    以下のようなテーブルがあり、 区分に2、3、4があれば抽出しないという SQL文を教えていただければと思います。 (SQLSERVER2000を使用しています) 名称    | 区分 テストa |  1 テストa |  1  テストa |  2 テストb |  1 テストb |  1 テストc |  1 テストc |  2 テストc |  3 テストc |  4 テストc |  5 テストd |  1 テストd |  1 テストd |  5 テストd |  5 テストd |  5 例でいくとテストaは区分が1、1、2で 2がはいっているので抽出しない。 テストbは1、1なので抽出する。 テストcは1、2、3、4、5で2、3、4がはいっている ので抽出しない。 テストdは1、1、5、5、5なので抽出する。 つまり結果としては テストaとテストdが抽出されるということです。 質問もままならないほどSQL初心者のため、 どうかご回答いただきたいと思います。 よろしくお願いします!!

  • SQLServer2000 で、SQLの書き方

    SQLServer2000上のデータ抽出方法について教えて下さい。 例えばデータとして・・・  カラム名: 品番 販売開始日 販売終了日  データ1 : A01 2011/01/01 2011/03/31  データ2 : A02 2011/02/01 2011/05/31  データ3 : A03 2011/04/01 2011/06/30 とします。 今、期間の入力として、 開始日:2011/03/01 終了日:2011/03/31 とした場合、この期間内にあるデータを抽出したいです。 答えは、A01 と A02 が指定期間内にあるので抽出されるSQLを教えて下さい。 (言いかえれば、指定期間内に掛っている情報の抽出です) どなたか、ご教授お願いします。