重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

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を書きたいのですが、うまく作れず困っています。
ご教授いただけないでしょうか?

よろしくお願いします。

A 回答 (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か月前
この部分はご自身でうまく処理してください。
    • good
    • 0
この回答へのお礼

本当に助かりました。

年月の1か月前とかもなんとかなりそうです。

お礼日時:2011/09/09 15:31

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月'
    • good
    • 0
この回答へのお礼

ありがとうございました。

SQLの世界が広がりました。

お礼日時:2011/09/09 15:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す