- ベストアンサー
SQLで2年連続で値が上昇した年を表示する
- みんなの回答 (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) という構造の結合テーブルを構成し、単純に二年前と前年、前年と今年の比較をしているだけです。
その他の回答 (1)
- bin-chan
- ベストアンサー率33% (1403/4213)
列示の中に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 未試験です。 あと、カンマの後ろには半角スペース入れると読み易いですよ
お礼
お早いご回答ありがとうございます! 教えて頂いた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 ;
お礼
ご回答ありがとうございました。 解説がとてもわかりやすくて 無事に解決しました。