データ取得方法とSQL記述について
- データ取得方法と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を記述すればよろしいでしょうか?
- toopeaan
- お礼率38% (51/133)
- その他(データベース)
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
select name, date, count(*) from table group by name, date; 上記で大丈夫だと思います。
関連する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です。
- ベストアンサー
- PostgreSQL
- 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文を書けば良いのでしょうか ? 前回、教えて頂いた例を参考に頑張っているのですが、 まだ、私には難しすぎる様です。 よろしくお願い致します。
- ベストアンサー
- Oracle
- 分岐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で取得する事は可能でしょうか? 有識者の方にご享受頂ければ幸いです。 どうぞ宜しくお願い申し上げます。
- ベストアンサー
- SQL Server
- 再帰的にデータを取得する方法について
再帰的にデータを取得する方法について質問させて下さい。 以下のような「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は分割した方が良いのでしょうか? どうかご教授のほどお願い致します。
- ベストアンサー
- Oracle
- 異なるキーで取得したデータの合成
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 非常に初歩的な質問かもしれませんが宜しくお願いいたします。
- ベストアンサー
- Oracle
- 2つのテーブルのデータまとめて取得したい
SQL Server2008を使用しているのですが、どうのようにデータを取得すれば良いか わからず困っております。 例えば、 名前は違うが全く同じテーブルが2つあるとします。 テーブルAには6レコード、テーブルBには3レコードのデータが存在するとします。 この時、単純に6レコード+3レコードの 9レコード分をひとつのテーブルとしてデータを 取得するにはどのようなSQL文を書けばよいでしょうか? SELECT * FROM テーブルA, テーブルBでは18レコードもデータを取得してしまい、且つ フィールド数も増加してしまいます。 宜しくお願いいたします。
- ベストアンサー
- SQL Server
- 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順)でもなさそうです。 この、順番は何で決まっているのでしょうか?
- ベストアンサー
- SQL Server
お礼
できました!! count(*)を使えばいいんですね。 count(name)ってしててエラーでてたんで どうしようかとおもいました。 ありがとうございました。