• ベストアンサー

SQLで2年連続で値が上昇した年を表示する

添付の表よりSQLのcase文を使用して2年連続でsaleが上がったyearを求めようと しています。 前年より上がった場合は以下のSQLで表示できたのですが 2年連続に上がった年を表示させようとするとうまく表示できません。 誰かご教授いただけないでしょうか? select year,sale from sales s1 where sale > (select sale from sales s2 where s2.year = s1.year -1) order by year

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

  • ベストアンサー
  • mitoneko
  • ベストアンサー率58% (469/798)
回答No.2

select s.year, s.sale from sales s join sales s1 on s1.year = s.year -1         join sales s2 on s2.year = s.year - 2 where s1.sale > s2.sale and s.sale > s1.sale order by year で、行けそうな気がしますけど。  書いてないことで推定した条件は、   yearフィールドには重複が無いこと。又は、適切な条件で一意化が出来ること。(この場合は、条件の付加が必要です。)   yearが初出又は、2年目の登場の場合には、2年前との比較のしようがありませんので、このような年度は表示しません。    やっていることは単純です。内部結合を使って  year, sale, year(-1), sale1(-1), year(-2), sale(-2)  という構造の結合テーブルを構成し、単純に二年前と前年、前年と今年の比較をしているだけです。

yoshi2519
質問者

お礼

ご回答ありがとうございました。 解説がとてもわかりやすくて 無事に解決しました。

その他の回答 (1)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

列示の中にCASEの記述が無いような…。 select s1.year, s1.sale from sales s1, (select s2.year, s2.sale from sales s2, (select s3.year, s3.sale from sales s3 where s3.year = s2.year - 1 and s3.sales < s2.sales) where s2.year = s1.year - 1 and s2.sale < s1.sale) order by s1.year 未試験です。 あと、カンマの後ろには半角スペース入れると読み易いですよ

yoshi2519
質問者

お礼

お早いご回答ありがとうございます! 教えて頂いたSQLを実行してみたところ「FROM句の副問い合わせは別名を持たなければなりません」と表示されています。 少しの修正で表示できそうなので確認してみます。 case文を入れるのを忘れてました。すみません。 自分で考えていたのは以下の文で2年連続表示はまだできていない 状態です。 SELECT year ,CASE WHEN sale = (SELECT sale FROM sales s2 WHERE s1.year = s2.year + 1) THEN '=' WHEN sale > (SELECT sale FROM sales s2 WHERE s1.year = s2.year + 1) THEN '+' END AS var FROM sales s1 ;

関連するQ&A