SQLserver2005で年月ごとの体重を表示するSQL文の作成方法
- SQLserver2005環境で、テーブルAから指定した年月ごとの体重を表示するSQL文の作成方法について教えてください。
- テーブルAには年月とIDでユニークなデータがあり、年月ごとに体重が保存されています。
- 指定した年月で抽出をかけた際に、今月の体重と前月の体重を取得するSQL文を作成したいです。
- ベストアンサー
SQL文を教えてください
SQLserver2005環境です。 テーブルA (年月とIDでユニーク) 年月 ID 体重 --------------------------- 2011年01月 1 50 2011年02月 1 51 2011年02月 2 40 2010年12月 3 59 2011年01月 3 60 2011年02月 3 61 2011年01月 4 70 のようになっていた場合、年月を2011年02月で抽出をかけた際に 今月体重を2011年02月、前月体重を2010年01月とし 年月 ID 今月体重 前月体重 --------------------------------------------- 2011年02月 1 51 50 2011年02月 2 40 Null 2011年02月 3 61 60 ↑の様な結果を得られるSQLを書きたいのですが、うまく作れず困っています。 ご教授いただけないでしょうか? よろしくお願いします。
- BAISYS
- お礼率100% (3/3)
- SQL Server
- 回答数2
- ありがとう数3
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
サブクエリで取得するのが簡単なのではないでしょうか。 こんなイメージです。 select 年月,ID,体重 as 今月体重 ,(select 体重 from テーブルA b where b.ID = a.ID and b.年月 = a.年月の1か月前) as 前月体重 from テーブルA a where a.年月 = 2011年02月; 年月のデータ型が分かりませんし、SQL Serverでの日付関連の処理に詳しくないので >a.年月の1か月前 この部分はご自身でうまく処理してください。
その他の回答 (1)
- nora1962
- ベストアンサー率60% (431/717)
with t as (select cast( replace( REPLACE( 年月, '年', '/'),'月', '/') + '1' as DATE) as dt, 年月,ID, 体重 from テーブルA) select t1.*,t2.体重 as 前月体重 from t t1 left join t t2 on t1.dt = DATEADD(MONTH,1,t2.dt) and t1.id = t2.id where t1.年月 ='2011年02月'
お礼
ありがとうございました。 SQLの世界が広がりました。
関連するQ&A
- SQL文に関して教えてください。
SQL文に関して教えてください。 SQLServer2005を利用し、マイクロソフトアクセスでadpを利用して構築を初めて行っています。 そこで、SQLServerのビューこのような事は可能でしょうか? (ビューをネストすれば出来るのですが、1つのSQL内で完結させたい) 色々探し、近い物はあったのですが、若干異なります。 フィールドがID1、ID2、ID3、date、txtと存在するとします。 ID1 ID2 date txt 1 1 20100801 test 2 1 20100901 Null 3 3 20100928 Null txtフィールドがNullのレコードを対象とし、dateが一番古い日付のレコード、nullのレコード数を 取り出す。結果としては以下が出れば正解です。 (グループ化が必要かと思います) ID1 ID2 date レコード数 2 1 20100901 2 やはり難しいでしょうか? 御教授願います。
- ベストアンサー
- SQL Server
- SQL文で教えてください
Left join と Right join の両方の機能をもった、一つのSQL文はどうしたらいいのでしょうか。 つまり、Left join は左側のテーブルを基準とし右にないものでも右の部分はNUllのままで抽出しますが、双方にあるものは統合して出力し、片方に無いものは、ない部分だけNullで、とにかく両方を抽出するというSQL文が書けないかと思案しています。
- 締切済み
- PostgreSQL
- sqlのJoinでこんなこと出来ますか、
sqlのJoinでこんなこと出来ますか、 当方初心者につき宜しく御願いします。 テーブルAにはIDがありIDはユニークです。テーブルBにはIDと項目がありIDは複数件存在します。項目には「あ」又は「い」、「う」、「え」、「を」が入っています。idに対して「あ」だけの時もあれば、「い」、と「う」が存在する時もあります。1件または複数件存在します。 条件に「あ」を抽出するようにして、「あ」がないときは存在するがテーブルBには存在するという結果を作りたいのです。 ID=1、あ ID=2、NULL という結果を作りたいのです。テーブルの双方に存在して、かつ「あ」であれば「あ」以外はNULLのレコードを作りたいのです。 説明が悪くて申し訳ありませんが宜しく御願い致します。
- ベストアンサー
- MySQL
- SQL文で
T-SQLを使用しています。 下記のような場合どのようにSQL文を組めばよいのでしょうか?Group byを使用すると思うのですが・・・ テーブル名:SampleTbl フィールド1:ID(プライマリ) フィールド2:Name(varchar(4)) 【名前】 フィールド3:UpTime(varchar(16))【更新時刻】 ※UpTimeの概要 yyyyMMddhhmmssss 2004/06/01 12:00:0000 中身 1,鈴木,2004060112000000 2,鈴木,2004060112050000 3,鈴木,2004060112100000 4,鈴木,2004060112200000 5,山田,2004060112000000 抽出条件: 同一の名前で更新日が5分以内の範囲で更新されているデータのみ抽出する 抽出結果 1,鈴木,2004060112000000 2,鈴木,2004060112050000 3,鈴木,2004060112100000 上記の抽出結果を取得するにはどのようにすればよいか、ご教授お願い致します。
- 締切済み
- SQL Server
- SQL文の書き方(こんなこと出来ますか)
テーブルA(ID、A,B,中身) テーブルa(A、コードの名前1) テーブルb(B、コードの名前2) ID、A、コードの名前1、B、コードの名前2、中身という風に結果を得たいのですが、Aがテーブルaに存在する、又はBがテーブルbに存在するものを出力したいのですがJoinが良く分かりません。aまたはbに存在しない時はコードの名前はNullにしたく、また抽出されテーブルAのレコードが重複しないようにしたいのですが、考えても分かりません。ご教授下さるようお願い致します。
- ベストアンサー
- MySQL
- SQL文を教えてください
SQL文を教えてください。 以下のテーブルがあります。 T入金 [ID] [名前] [金額] [入金日] 1, 山田, 25000, 2009/01/01 2, 佐藤, 5000, 2009/02/01 3, 山田, 30000, 2009/01/02 4, 佐藤, 45000, 2009/02/02 5, 佐藤, 10000, 2009/02/03 同じ人物で、入金額50000円に至ったときの入金日を 抽出したいと思っています。 上記データだと、 山田さんは入金日2009/01/02、 佐藤さんは入金日2009/02/02、 ということになります。 これを一つのSQL文で抽出できますでしょうか。 ご教授宜しくお願いいたします。 (Access2000のクエリで抽出しようとしていますが、Accessで無理ならSQL Server、MySQL、PostgreSQLでも可です)
- 締切済み
- その他(データベース)
- 上位3位を求めるSQL文は?
Mysqlのバージョンは4.0.14です。 次のようなテーブルがあります。 id money ----------------- 1 2500 2 3200 1 1200 3 5000 4 2500 5 1200 IDでグループ化し、上位3件を抽出したいのです。 以下のように抽出したいのです。 Ranking id money 1 3 5000 2 1 3700 6 2 3200 SQLServerなら、上位何件かを取り出すには、 TOPを利用するようですが、 MYSQLにもそのようなものはないのでしょうか?
- ベストアンサー
- MySQL
- sql文のwhere句について
<環境>sqlserver SQLでパラメータが空白であれば全件取得、パラメータに値が設定されている場合には 条件にHITするデータを抽出したいのですが、一本のクエリで抽出することができるのでしょうか? 空白時パラメータは以下のとおり入ってきます。 @no="" …完全一致 @name="%%" …部分一致 例) SELECT * FROM テーブル WHERE (NO = @no) and ((@name IS NULL) OR (@name IS NOT NULL) AND (NAME LIKE @name)) NAMEは上記クエリにて取得できています。 NOのところはどのようにすればよいでしょうか?
- ベストアンサー
- SQL Server
- ACCESS SQL文について
現在データの更新をACCESSを使って行っているのですがSQLが上手く実行されなくて困っております。 テーブル1 ID SUBID ------------------------ 100 20000 100 20000 101 20000 200 20001 201 20001 201 10000 202 20000 テーブル2 kyuID kyuSUBID ID subID ------------------------------ 100 20000 111 11111 101 20000 111 11111 102 20000 123 12345 200 20001 123 12345 201 20001 555 55555 202 20000 777 77777 このようにテーブルにデータが入っており、テーブル1のIDとSUBID とテーブル2のkyuID とkyusubIDを紐づかせテーブル1のIDとSUBIDをテーブル2のIDとSUBIDにアップデートしたいと考えております。 結果 テーブル1 ID SUBID ------------------------ 111 11111 111 11111 111 11111 123 12345 555 55555 201 10000 777 77777 このような結果を求めたいと考えております。 私は頭が悪く解決できません。 わかる方、ご教授のほどよろしくお願いいたします。
- ベストアンサー
- その他(データベース)
- SQLのSELECT文教えてください。
VB5.0で、DBはSqlServer2000です。 SQL文のSELECT文で質問です。 ○A_TABLEの構成(概略) ・・・担当コード1・・・担当コード2 ○TANTO_TABLE 担当コード/担当名 (質問)TANTO_TABLEからA_TABLEの担当コード1と担当コード2の担当名を抽出したいのです。 次のSQLだと担当コード1のみしか抽出できません。 効率よく担当コード1と2の担当名を抽出するSQLを教えてください。お願いします。 SELECT 担当名 FROM A_TABLE,TANTO_TABLE WHERE A_TABLE.担当コード1 = TANTO_TABLE.担当コード
- ベストアンサー
- Visual Basic
お礼
本当に助かりました。 年月の1か月前とかもなんとかなりそうです。