アプリ版:「スタンプのみでお礼する」機能のリリースについて

添付の表より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

「SQLで2年連続で値が上昇した年を表示す」の質問画像

A 回答 (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)
 という構造の結合テーブルを構成し、単純に二年前と前年、前年と今年の比較をしているだけです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2014/01/26 18:49

列示の中に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

未試験です。
あと、カンマの後ろには半角スペース入れると読み易いですよ
    • good
    • 0
この回答へのお礼

お早いご回答ありがとうございます!
教えて頂いた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
;

お礼日時:2014/01/26 15:19

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