データ取得方法とSQL記述について

このQ&Aのポイント
  • データ取得方法とSQL記述について解説します。
  • 重複しないレコードの件数を取得するSQLの書き方を教えます。
  • データ取得に関するテクニックと注意点をまとめました。
回答を見る
  • ベストアンサー

データ取得

name*****key1****key2****date ------------------------------- AAA*******1*******1*****2003/01 BBB*******2*******2*****2002/12 AAA*******1*******2*****2003/01 BBB*******1*******2*****2002/11 BBB*******2*******2*****2002/11 AAA*******2*******2*****2003/01 AAA*******2*******2*****2002/12 ------------------------------- (※全てのフィールドが同じ情報のレコードはない) ****は意味はありません。表を見やすくするために書いただけです。 上記のテーブルから下記のデータを取得したいと 考えています。 AAA*****2002/12*****1 AAA*****2003/01*****3 BBB*****2002/11*****2 BBB*****2002/12*****1 name列とdate列の重複しないレコードの件数を取得したいのですが どのようなSQLを記述すればよろしいでしょうか?

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

  • ベストアンサー
  • timber
  • ベストアンサー率29% (218/739)
回答No.1

select name, date, count(*) from table group by name, date; 上記で大丈夫だと思います。

toopeaan
質問者

お礼

できました!! count(*)を使えばいいんですね。 count(name)ってしててエラーでてたんで どうしようかとおもいました。 ありがとうございました。

関連するQ&A

  • Access2000で重複データに・・・

    Access2000の重複データの処理について質問です。 あるフィールドの重複レコードを検索し、該当するレコードの別フィールドに「●」をつけようとしています。ただ、重複する最初のレコードには「●」をつけたくないのです。 例えば  aaa ・・・ (1)  bbb  aaa ・・・ (2)  ccc  aaa ・・・ (3)  eee というフィールドだった場合、(1)には「●」をつけずに(2)以降にのみつけたいのです。 重複クエリで重複レコードを抽出して重複テーブル作成→重複テーブルと元テーブルを組み合わせて更新クエリ作成という方法でやったのですが、そうすると(1)にも「●」がついてきます。(当然ですが・・・) 何か名案があれば教えてください。 やはり、VBAを使わないと無理でしょうか・・・?

  • 重複レコードの抽出について

    以下のようなテーブルからmailが重複していてnameの値が全て同じ値を持つレコードを取得するためのSQL文を教えてください。 mail | name ----------- aaa | 01 aaa | 01 aaa | 01 bbb | 02 bbb | 02 bbb | 01 ccc | 01 ccc | 01 ccc | 02 select * from test where mail in (select mail from test where mail group by mail having count(mail)>1) 上記のSQL文だと以下のデータが取得されてしまいます。 ↓ mail | name ----------- aaa | 01 ○ aaa | 01 ○ aaa | 01 ○ bbb | 02 × bbb | 02 × ccc | 01 × ccc | 01 × ○印のみ取得したいのですが、 SQL文をどのように修正すればよいのでしょうか。 よろしくお願いいたします。

  • 2つの列からの最大値取得

    もしかしたらすごく簡単なことかもしれませんが、 教えて下さい。 以下のテーブルから、date1もしくはdate2が最新の日付のデータを取得するSQL文の書き方がわかりません。 (以下の例では、bbbが取得したい) name date1 date2 ---- -------- ---------- aaa 20041110 (NULL) ---- -------- ---------- bbb (NULL) 20041111 ---- -------- ---------- ccc 20041109 (NULL) ---- -------- ---------- ddd (NULL) 20041109 ---- -------- ---------- # 図がずれてわかりづらいかと思いますが... date1,date2でそれぞれmaxでname取得後に比較するしかないのでしょうか? 環境は、Redhat9+Postgresql-7.3です。

  • Oracl[10g]の SQL文について(No.6)

    何度も恐縮です。前回の質問(例題)が間違えていました。 本当に申し訳ございません。改めて、お願いしたい次第です。 Oracl[10g]の SQL文について、教えて下さい。 [C1]テーブルに [CODE](key) と [NAME]フィールドがあるとします。 内容は、 A-1 NAME-1 A-2 NAME-2 A-3 NAME-3 と、します。 [B]テーブルに [CODE](key) と [NOUKI](key) と [KIN] フィールドがあるとします。 内容は、 A-1 2005/01/01 100 A-1 2005/01/02 200 A-2 2005/01/01 300 A-2 2005/01/10 400 A-2 2005/12/10 500 と、します。 [C2]テーブルに [CODE2](key) と [NAME2] と [CODE] フィールドがあるとします。 内容は、 AAA NAME2-1 A-1 BBB NAME2-2 A-2 CCC NAME2-3 A-3 と、します。 [C3]テーブルに [CODE2](key) と [NO](key) と [KIN2] フィールドがあるとします。 内容は、 AAA 1 200 AAA 2 300 BBB 1 10 BBB 2 20 BBB 3 30 と、します。 結果が、 A-1 NAME-1 300[B]テーブルの合計 500[C3]テーブルの合計 A-2 NAME-2 1200[B]テーブルの合計 60[C3]テーブルの合計 と、なる様にする為には、どういうSQL文を書けば良いのでしょうか ? 前回、教えて頂いた例を参考に頑張っているのですが、 まだ、私には難しすぎる様です。 よろしくお願い致します。

  • 分岐SQLを一発のSQLで実現したい

    【データベース:SQLServer2005】 SQLのアドバイスを頂きたいです。 【テーブル】 テーブル名:Table1 フィールド名:種類、キー1、キー2 テーブル名:Table2 フィールド名:種類、キー1、キー2 テーブル名:Table3 フィールド名:種類、キー1、キー2 【データ】 Table1 種類、キー1、キー2 001  AAA  BBB 001  AAA  CCC 001  AAA  DDD Table2 種類、キー1、キー2 002  AAA  BBB 002  AAA  CCC NULL  AAA  DDD Table3 種類、キー1、キー2 NULL  AAA  BBB NULL  AAA  CCC NULL  AAA  DDD これをUNIONで取得します。 種類、キー1、キー2 001  AAA  BBB 001  AAA  CCC 001  AAA  DDD 002  AAA  BBB 002  AAA  CCC NULL  AAA  DDD NULL  AAA  BBB NULL  AAA  CCC 実現したいのは、 1)同種類、キー1、キー2のデータで、 種類にNULLが含まれていたら、NULLのデータは取得しない 2)同種類、キー1、キー2のデータで、 種類にNULLしかないデータは、取得する 001  AAA  BBB 001  AAA  CCC 001  AAA  DDD 002  AAA  BBB 002  AAA  CCC NULL  AAA  DDD →いる NULL  AAA  BBB →いらない NULL  AAA  CCC →いらない ↓結果 001  AAA  CCC 001  AAA  DDD 002  AAA  BBB 002  AAA  CCC NULL  AAA  DDD 上記を実現する為、UNION後のSQLでも構わないので、 一発のSQLで取得する事は可能でしょうか? 有識者の方にご享受頂ければ幸いです。 どうぞ宜しくお願い申し上げます。

  • 再帰的にデータを取得する方法について

    再帰的にデータを取得する方法について質問させて下さい。 以下のような「TABLE1」と「TABLE2」があった場合に、 TABLE1 ------------------------ | ID | AID | JOB | ------------------------ |  1|   10| XXXXX| ------------------------ TABLE2 ------------------------- | ID | PID | NAME | ------------------------- |  10|  100|   aaa| |  100| 1000|   bbb| | 1000| 10000|   ccc| -------------------------- 再帰的に取得したい親階層が2つまで等分かっている場合に、以下のような結果を1度のSQLで取る事は可能でしょうか? ---------------------------------------------------------------------- |ID|AID|JOB |AID_NAME|AID_PID_1|AID_PID_NAME_1|AID_PID_2|AID_NAME_2| ---------------------------------------------------------------------- |1| 10|HIRA |     aaa|    100|        bbb|   1000|      ccc| ---------------------------------------------------------------------- また、上記の結果が取得可能な場合にパフォーマンス的には1度で取得した方が良いのでしょうか? それともTABLE2の親階層を再帰的に取得するSQLは分割した方が良いのでしょうか? どうかご教授のほどお願い致します。

  • 異なるキーで取得したデータの合成

    SQLに関して質問です。 以下のようなテーブルA、Bがあった場合、 【テーブルA】  カラム1  カラム2  ------------------------  AAA   CCC  BBB   DDD 【テーブルB】  カラム3  カラム4  ------------------------  AAA   1  BBB   2  CCC   3  DDD   4 次のような結果を得るにはどのようなSQL文を記述すれば良いでしょうか? 【求める結果】  カラム1  カラム2 カラム4(1) カラム4(2)  ---------------------------------------------------  AAA   CCC    1      3  BBB   DDD    2      4 非常に初歩的な質問かもしれませんが宜しくお願いいたします。

  • 2つのテーブルのデータまとめて取得したい

    SQL Server2008を使用しているのですが、どうのようにデータを取得すれば良いか わからず困っております。 例えば、 名前は違うが全く同じテーブルが2つあるとします。 テーブルAには6レコード、テーブルBには3レコードのデータが存在するとします。 この時、単純に6レコード+3レコードの 9レコード分をひとつのテーブルとしてデータを 取得するにはどのようなSQL文を書けばよいでしょうか? SELECT * FROM テーブルA, テーブルBでは18レコードもデータを取得してしまい、且つ フィールド数も増加してしまいます。 宜しくお願いいたします。

  • WHERE句内で「値=最大値」を取得する方法

    どのようなSQLを書けばよいのかわからないので質問させてください。 以下、MasterテーブルとDataテーブルがあります。 MasterテーブルとDataテーブルのレコードを結合して取得したいと思っています。 ただし、Dataテーブルのレコードはkey1,key2,key3でグループ化した中で最新の日付の レコードと結合したいと思っています。 以下のような取得結果を想定しているのですがどのようなSQLを書けばよろしいでしょうか。 ちなみに SELECT m.key1, m.key2, m.key3, m.type, m.name, d.date, d.value FROM test.master m, test.data d; where m.key1 = d.key1 and m.key2 = d.key2 and m.key3 = d.key3 and d.date = (select Max(date) from data group by key1, key2, key3) というSQLではエラーになってしまいました。 【取得結果】 key1 key2 key3 type  name      date         value -------------------------------------------------------------------------------------------------------------  1  2   3  11   name1  2016-12-17 12:00:00    30  4  5   6  22   name2  2016-12-18 12:00:00    30  7  8   9  33   name3  2016-12-19 12:00:00    30 両者とも主キーはkey1,key2,key3となります。 【Master】 key1 key2 key3 type  name ------------------------------------------------------------  1  2   3  11   name1  4  5   6  22   name2  7  8   9  33   name3 【Data】 key1 key2 key3      date       value ---------------------------------------------------------------------------------  1  2   3   2016-12-17 10:00:00    10  1  2   3   2016-12-17 11:00:00    20  1  2   3   2016-12-17 12:00:00    30  4  5   6   2016-12-18 10:00:00    10  4  5   6   2016-12-18 11:00:00    20  4  5   6   2016-12-18 12:00:00    30  7  8   9   2016-12-19 10:00:00    10  7  8   9   2016-12-19 11:00:00    20  7  8   9   2016-12-19 12:00:00    30

    • ベストアンサー
    • MySQL
  • Selectした時のレコードの取得順

    SQL Server2005 で開発しています。 Order by で並び替えてレコードをSelectする際に、 Order by の対象列データが同じ場合は、 どういった順番でレコードが取得できるのでしょうか? TableA No | Data1 | Data2   1| AAA | 100   2| AAA | 200   3| AAA | 300   4| ABC | 400   5| BBB | 500 (Noはクラスタ化PK) 例えば、上のようなテーブルから次のSQLを実行すると  (1)Select * From TableA ;  (2)Select * From TableA Order by Data1 Asc;  (3)Select * From TableA Order by Data1 Asc, No Asc;  (1)(2)(3)全て、次の順で返ってきました。   1| AAA | 100   2| AAA | 200   3| AAA | 300   4| ABC | 400   5| BBB | 500  しかし、(2)のSQLは、データによって  次の順で返ってくることがありました。   3| AAA | 300   1| AAA | 100   2| AAA | 200   4| ABC | 400   5| BBB | 500    1~3レコード目までは全てData1がAAAのレコードですが  特に指定していなくても、No(PK)の順になるのかと思っていました。    なお、レコードができた(Insert順)でもなさそうです。  この、順番は何で決まっているのでしょうか?