- 締切済み
ビュー(view)のSQL
SQL初心者で困っております。 どのようなSQLを作成すれば良いか ご助言頂ける方がいらっしゃいましたら よろしくお願いいたします。 テーブルにイメージは以下通りです。 項目1,日付,月,項目2,項目3 1234 ,6/2 ,6 ,A ,1 1234 ,6/4 ,6 ,A ,2 1234 ,6/5 ,6 ,A ,3 1234 ,6/6 ,6 ,B ,1 1234 ,6/6 ,6 ,B ,2 1234 ,6/6 ,6 ,B ,3 1234 ,7/2 ,7 ,A ,1 1234 ,7/4 ,7 ,A ,2 主キーは、項目1,日付です。 ビューで項目1,月をグループ化して、 項目2の昇順のトップ その中で項目3の昇順のトップ のレコードを抽出したいと思います。 結果が以下のようなイメージです。 1234,6,A,1 1234,7,A,1
- taka4terada
- お礼率33% (3/9)
- その他(データベース)
- 回答数2
- ありがとう数0
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
分析関数を利用すると・・ select 項目1,月,項目2,項目3 from ( select x.*,row_number() over(partition by 項目1,月 order by 項目2,項目3) R from テーブル x ) where R=1 な感じ。
- chukenkenkou
- ベストアンサー率43% (833/1926)
RDBMS名とバージョンを明記してください。 >主キーは、項目1,日付です この2列の組み合わせでは、重複があり、RDBの世界ではこれを主キーとは一般的に呼びません。 top指定、分析関数、サブクエリ中で「limit 1」指定など、こういった操作を実現するための指定は、RDBMS&バージョンにより、相当に異なります。
関連するQ&A
- SQLでうまいことビューが作れない
SQLサーバー2005+マネジメントスタジオでビューを作っています。 以下のデータが存在するときに●のついたデータだけを抽出したいです。 明細IDはユニークとし、明細IDの中で一番日付が新しいものだけを取得したいです。 T-SQLでどのように書けばよいか教えてください。 <データ> 明細ID 日付 111 2010/10/01 111 2010/11/01 111 2010/12/01 ● 222 2010/11/01 ● 333 2010/09/01 333 2010/10/01 ● 444 2010/10/01 444 2010/11/01 444 2010/12/01 ● 555 2010/09/01 ● <出力> 明細ID 日付 111 2010/12/01 ● 222 2010/11/01 ● 333 2010/10/01 ● 444 2010/12/01 ● 555 2010/09/01 ●
- ベストアンサー
- SQL Server
- SQLについての質問
SQLについて質問があります。 以下のようなデータがあったとします。 項目1 項目2 項目3 項目4 ---------------------------- 1 A 300 1 2 A 400 1 3 A 300 0 4 B 200 1 5 B 200 1 6 B 100 0 7 C 200 0 8 C 300 0 9 C 600 1 ここから「項目4 = 1」のレコードを「項目2」で集約し 「項目3」のサマリを求めると 項目2 項目3 -------------- A 700 B 400 C 600 となりここからさらに「項目3 >= 500」となる、 元のレコードを抽出したいのですが このような複雑な処理を1度のSQL可能なのでしょうか? ご存知の方がいらっしゃいましたら、よろしくお願いいたします。 ・期待する結果 項目1 項目2 項目3 項目4 ---------------------------- 1 A 300 1 2 A 400 1 9 C 600 1
- 締切済み
- Oracle
- データ抽出SQLについて
以下の様なテーブル内容のデータがあり、抽出条件:項目Aが同一でかつ、その項目Aに対する項目Bの値がひとつでも異なっている項目Aを抽出するSQLについて教えてもらえないでしょうか。よろしく御願い致します。 <データの内容> 項目A 項目B 0001 A 0001 A 0002 A 0002 B 0003 C 0003 A 0003 A 0004 B 0004 B 0004 B 0004 B <抽出結果> 0002 0003
- ベストアンサー
- SE・インフラ・Webエンジニア
- SQL文 特定のレコードを抽出したい
以下のようなテーブルAがあったとします。 年月日,項目B ---------------------- 20080101 100 20080102 100 20080103 200 20080104 400 20080105 400 20080106 200 SQL文にて、データの抽出を行いたいのですが、 抽出したいのは、データに変更があった年月日と項目Bの値です。 年月日,項目B ---------------------- 20080101 100 20080103 200 20080104 400 20080106 200 前の年月日と比較し、項目Bに違いがあった場合のデータだけ抽出したいのですが、SQL文で行うことは可能でしょうか?? 環境は、SQL Server 2005 です。
- ベストアンサー
- Microsoft ASP
- 簡単なSQLに関して
初歩的なSQLの質問で申し訳ありません。 教えて下さい。 下記のような、ある2つの異なる名前の同項目のテーブルが存在します。 《テーブル》 Aテーブル 社員番号、日付、内容 Bテーブル 社員番号、日付、内容 ※ 内容に関しては、AテーブルとBテーブルで全く違います。 これらの2つのテーブルをマージさせ、社員番号毎の内容毎、日付順に したいと考えています。 どのようなSQLを書けば良いでしょうか?? 尚、テーブルに関しては、諸事情であえて2つに分けてあります。 よろしくお願いします。
- ベストアンサー
- Oracle
- SQL文で他テーブルの件数も同時に求めたい
SQL文について教えてください。(DBはSQLサーバー2000です。) 以下のように2つのテーブルがあります。Aテーブルのフィールド項目の抽出と、AテーブルのIDフィールドと同じ値のBテーブルの件数を同時に抽出したいのですが、どのように書いてよいか分かりません。恐れ入りますが、教えていただけないでしょうか? テーブルA ID name Age -------------- 1 太郎 20 2 二郎 35 3 花子 26 テーブルB ID memo ------------------ 1 私は男です 1 東京に住んでます 2 友達が3人います 3 私は彼氏がいます 3 先日TDLに出かけました。 3 ランチはカレーでした。 要約すると、Aテーブルの全情報とテーブルBの件数を同時に抽出したいのです。以下のようなイメージです。 name Age テーブルB件数 ------------------- 太郎、20、 2 二郎、35、 1 花子、26、 3 よろしくお願い致します。
- ベストアンサー
- その他(プログラミング・開発)
- SQLで、指定日条件のSQL文
MySQLを使っています。 商品テーブルの中で、 同じ商品のレコードが複数あります。 その多数のレコード中に、日付項目があります。 そこから、 1)商品IDで重複せずに、2)指定日に、3)一番近い過去の日、4)指定日を含めて、複数ある未来の全レコード、を抽出するには、 どのようなSQL文を書けばよいでしょうか? 商品でユニークになるように、 1.過去に複数ある日付の中から、指定日に、一番近いレコード。 2.未来に複数ある日付の中の、全ての未来の、レコード。 3.同一商品レコードは、複数抽出されない。
- ベストアンサー
- SQL Server
- 2テーブルの別カラムを一つにまとめたViewの作成
以下の2つのテーブルがあった場合 Aテーブル 商品番号,種別 123456,A 123456,C 123456,M Bテーブル 商品番号親 123456 123123 123321 以下のようなView にしたいのですができますでしょうか。 Viewテーブル 新商品番号 123456 123123 123321 A123456 C123456 M123456 上3レコードは、Bテーブルのレコード、 下3レコードは、Aテーブルの種別と、商品番号を、CONCATしています。 なお、Viewテーブルは、全てユニークなレコードになります。 すみませんが、ご回答よろしくお願いいたします。
- ベストアンサー
- MySQL
- SQLで日付
MySQLです。JAVAです。 下記に該当するレコード項目全てを抽出するには、 どのようなSQLを書けばよいでしょうか? 指定日 sitei_date = 2015-07-14 sampleテーブル -------------------- ID name date -------------------- 1 商品A 2015-07-07 1 商品A 2015-07-13 1 商品A 2015-07-14 ・・・ これを抽出したい 1 商品A 2015-09-11 2 商品B 2015-09-10 2 商品B 2015-07-15 2 商品B 2015-07-13 3 商品C 2015-07-07 3 商品C 2015-07-11
- ベストアンサー
- MySQL
- SQLで、指定日に一番近いレコードだけ抽出
Linuxサーバーで、MySQLを使っています。 商品テーブルの中で、 同じ商品のレコードが複数あります。 (例です。本来ならそんなつくりのテーブルは作らないです。) その多数のレコード中に、日付項目があります。 そこから、 1)商品毎に、2)指定日に、3)一番近い過去未来の日の、4)レコードだけを抽出するには、 どのようなSQL文を書けばよいでしょうか? 1.過去に複数ある日付の中から、指定日に、一番近いレコード。 2.未来に複数ある日付の中から、指定日に、一番近いレコード。 3.同一商品レコードは、複数抽出されない。
- ベストアンサー
- MySQL
補足
回答ありがとうございます。 >RDBMS名とバージョンを明記してください。 Oracleの10gです。 >重複があり、 失礼しました。例が間違っていました。 項目1に対して日付でユニークになります。 1234 ,6/2 ,6 ,A ,1 1234 ,6/4 ,6 ,A ,2 1234 ,6/5 ,6 ,A ,3 1234 ,6/6 ,6 ,B ,1 1234 ,6/7 ,6 ,B ,2 1234 ,6/8 ,6 ,B ,3 2222 ,6/2 ,6 ,A ,1 2222 ,6/4 ,6 ,A ,2 よろしくお願い申します。