SQLServer2005を使った条件をつけたデータ抽出方法

このQ&Aのポイント
  • SQLServer2005を使用して、指定の条件に基づいてデータを抽出する方法について説明します。
  • テーブルAにはID、処理番号、日付、Dataの列があります。
  • IDと処理番号が一致する行のうち、日付が最も古い行を抽出するためには、min関数を使用してGroup by文を作成します。しかし、Data列が抜き出せない問題があります。解決策としては、一度上記の命令文でテーブルを作成し、元のテーブルとマッチングさせる方法があります。
回答を見る
  • ベストアンサー

条件をつけて日付の古い行を抜き出したい

SQLserver2005を使っています。 下記のようなテーブルがあります。 ID 処理番号  日付   Data AA  1    2008/1/1  10 AA  1    2008/1/2  11 AA  1    2008/1/3  12 AA  2    2008/1/4  13 AB  3    2008/1/5  14 AB  3    2008/1/6  15 AB  4    2008/1/7  16 この時に「IDと処理番号が一致した場合、日付の一番古い行を抜き出す」 という条件でデータの抽出をすることは可能でしょうか 結果は下記のようになります。 ID 処理番号  日付   Data AA  1    2008/1/1  10 AA  2    2008/1/4  13 AB  3    2008/1/5  14 AB  4    2008/1/7  16 下のような命令文を作ったのですが、 「Data列」が抜き出せません。 select ID,処理番号,min(日付) from テーブルA Group by ID,処理番号 一度上の命令文でテーブルを作って元のテーブルとマッチングさせるしかないのでしょうか?出来れば一発で抜き出したいです。 ご教授宜しくお願いします。

  • kikei
  • お礼率70% (82/116)

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

  • ベストアンサー
  • 3rd_001
  • ベストアンサー率66% (115/174)
回答No.1

最小と最大の違いはありますが、以下の質問と同じ内容です。 参考にしてください。 http://oshiete1.goo.ne.jp/qa4750759.html

関連するQ&A

  • 日付の条件の書き方

    SQLserver2005を使い始めた初心者です. 現在,日付の条件で躓いています. 番号 日付  1 2008/10/29 2 2008/11/02 3 2008/11/01 4 2008/11/03 というようなデータベースがありまして, MAX(日付)が今日から3日前以前のデータを抽出するという, 条件を書きたいのですが何かアドバイスを頂けたら幸いです.      

  • 日付型(時刻含む)を抽出条件にして行を抽出したい。

    はじめまして、よろしくお願いします。 現在SQLサーバー2000を使用してこの処理を行おうと思っております。 一度テーブルに格納したデータをSELECT文を使って抽出したい と思っているのですが、WHERE条件に日付型のフィールドを指定するとうまく行きません。(時刻が日付型のフィールドに入っている場合、うまくいきません。) やっていることは YMD(DATE型・主キー)、ID(VERCHAR型・主キー)、NAME(VERCHAR型) というのテーブル(テーブル名:MEIBO)に入っている 2002/02/02 14:10:55、0001、山田 太郎 というデータを 取込年月日、個人IDを指定して特定の列を取り出そうとしています。 SQL文は SELECT * FROM MEIBO WHERE YMD = '2002/02/02 14:10:55' AND ID = "0001' と記述していますが、一件もヒットしません。 DATE型のフィールドにはINSERTするときにGETDATE()をつかってシステム日付を 格納するようにしています。 GETDATE()ではなく、DATE()を使ってシステム日付を格納した 2002/02/02、0001、山田 太郎 という時刻の入っていないデータに対しては SELECT * FROM MEIBO WHERE YMD = '2002/02/02' AND ID = "0001' というSQL文でヒットするのですようです。 時刻が入ったらそのフィールドを抽出条件として使うことは無理なのでしょうか? 基本的な部分で勘違いしているのかもしれませんが なにかお気づきの点がありましたら、ご教授ください。

  • 条件をつけてレコードを取得したい

    以下のようなA,Bテーブルから条件を指定してレコードを取得したい 【Aテーブル】 ID Bテーブル番号 0001      null 0002      null 0003      null 【Bテーブル】 シーケンス番号   ID    登録日 処理済みフラグ       0010  0001 2014/01/01        0       0011  0001 2014/01/02        1       0012  0001 2014/01/03        0 <結果> 【Aテーブル】 ID Bテーブル番号 0001     0001 0002     null 0003     null 条件としては以下の条件です。 (1)Aテーブルは全レコード出力する (2)BテーブルのAテーブルシーケンス番号が複数存在する場合、登録日が一番古いレコードを抽出する (3)Bテーブルの処理済みフラグが0のレコード以外はnullとする。 自分で抽出条件を作成したのですが、Aテーブルの0001分しか上手く抽出出来ませんでした。 SELECT * FROM Aテーブル AT (SELECT シーケンス番号, MIN(登録日) AS 登録日 FROM Bテーブル GROUP BY AテーブルID) BT1, (SELECT * FROM Bテーブル) BT2 WHERE AT.ID = BT1.ID AND BT1.登録日 = BT2.登録日 AND BT1.ID = BT2.ID AND BT2.処理済みフラグ = '0' 一度上の命令文でテーブルを作って元のテーブルとマッチングさせるしかないのでしょうか?出来れば一発で抜き出したいです。 ご教授宜しくお願いします。

  • 【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つで、 テーブルの開始日付と終了日付の間に入力日付がある列を抽出する場合、 どうすればよいか分かりませんでした。 その為、何か良い手をご存知の方がいらっしゃいましたら、アドバイスをいただければと思います。 よろしくお願いします。

  • アクセスで完全一致でない日付の場合の抽出

    質問をするにあたってよい例示が出せていないかもしれませんがお助けください。ID番号でたずさわった人を年と月でそれぞれデータを登録しています。 下記のように年度と月は降順でそれぞれ並びかえしています | ID | 名前 | 年度 | 月 | | aa | A子  |2006 | 12 | | aa | B子  |2006 | 12 | | aa | C子  |2006 | 12 | | bb | D子  |2006 | 12 | | bb | E子  |2006 | 12 | | bb | F子  |2006 | 12 | | aa | A子  |2006 | 07 | | aa | B子  |2006 | 07 | | aa | A子  |2005 | 12 | | aa | C子  |2005 | 12 | このデータから今日の日付(2007年1月)と比較して ID aa の一番近い年と月のデータを抽出したいのですがどのようなクエリを組めばよいのか教えてほしいのです。 求める回答としては上から3つのデータを抽出するようにしたいのです。ただしこの場合は3件ですがデータの登録によって月のデータは増減するものと考えてください。 よろしくお願いいたします。

  • SQL:複数行のデータを一つの文字列にまとめたい

    複数行のデータを一つの文字列にまとめる方法を教えてください。 ※環境SQLServer2005 例: ID DATA AA XXX BB YYY AA ZZZ 次のようなテーブルがあるとき、IDがAAであるものを一つの文字列 "XXXZZZ" にまとめたデータにSQLで加工したいです。

  • 日付と文字列を条件としてDLookup関数で抽出さ

    日付と文字列を条件としてDLookup関数で抽出させたいです。アクセスです。 テーブル1のデザイン フィールド名 ID(数値型) フィールド1(テキスト型) 取得日時(日付/時刻型) テーブル1のデータ ID  フィールド1  取得日時 1       あ  2013/01/05 2       い  2013/01/05 この条件でvbaでIDの値を抽出したいのですが MsgBox DLookup("[ID]", "テーブル1", "[取得日時] = #2013/01/05#") だと、1が返ってきちゃうのでフィールド1でもフィルタをかけたいのですが どうやればいいでしょうか? MsgBox DLookup("[ID]", "テーブル1", "[取得日時] = #2013/01/05#" And "[フィールド1] = 'あ'") にすると、型が一致しません。(Error 13)になります。 ご教授よろしくお願いします。

  • 特殊な?日付データ条件のSELECT文で困っています。回答御願いします。

    すいません。初心者のSQL構文の質問です。 データベースはSQLServer2005です。 ID | 履歴 | 有効日付 100 | 1 | 2009/5/15 100 | 2 | 2009/7/15 100 | 3 | NULL(最新データ) 200 | 1 | NULL(最新データ) のようなテーブルがあります。 データ履歴を作成するたびに有効日付には指定した日付が入ります。 作成した最新のデータには有効日付にはNULLが入るようになってます。 有効日付はdate型です。 このテーブルでのSELECTで 例えば、 2009/6/15と入力された時(条件)には 結果: 2 |2009/7/15 2009/7/15と入力された時(条件)には 結果: 2 |2009/7/15 2009/7/16と入力された時(条件)には 結果: 3 |NULL(最新データ) という結果を取得したいのです。 どなたか詳しい方のご教授をよろしくお願い致します。

  • 日付型→文字列

    SQLServer2005の環境にて、 日付型の項目(YYYY/MM/DD HH:MM:SS)から日付のみを抽出したい場合、 現在SUBSTRING(CONVERT(VARCHAR,AA),1,10) と変換を行っているのですが、結果が「MM DD YYYY」となってしまいます。 「YYYY/MM/DD」の形式で取得するにはどのようなSQL文にすればよろしいのでしょうか。

  • Excel(マクロ?VBA?)で最大日付の行を抽出

    Excelのデータ抽出で困っております。 下記のようなデータがあり、各IDの最大日付の行を抽出しようとしていますが、抽出方法がわからず、困っています。  氏名  ID   日付   山田太郎 10 2012/12/01 山田太郎 10 2013/08/01 山田太郎 10 2014/12/01 山田太郎 10 2015/08/01 山田花子 20 2012/12/01 山田花子 20 2013/08/01 山田花子 20 2013/12/01 この際に、 山田太郎 10 2015/08/01 山田花子 20 2013/12/01 という2つの行を抽出したいですが、抽出方法がわかりません。 関数を使ってやろうとも思いましたが、関数をどれを使えばいいかわかりません。 別シートに抽出でも全く問題ありませんので、恐れ入りますが、抽出方法を教えてください。 よろしくお願いいたします。