2017-12-07 13 views
2

まあ上の参加、私のクエリは次のとおりです。はMYSQL - 自己が既に別名クエリ(?エイリアスのエイリアス)

SELECT *, 
(aliasA.avalue+aliasB.avalue) as mycustomsum 

FROM (SELECT bla,bla,bla ...) as aliasA 
INNER JOIN (SELECT bla,bla,bla ...) as aliasB 
ON aliasA.mydate=aliasB.otherdate 
order by month desc 

今私は、それ自体の別の列をしたいと思いますが、前12ヶ月のmycustomsumを示します! エイリアスの自己結合が機能しません!

他の言葉で私のクエリの結果は次のとおりです。

2017-12 | 123 
2017-11 | 456 
. 
. 
. 
2016-12 | 789 
2016-11 | 321 

と私は希望:ちょうど、

2017-12 | 123 | 789 
2017-11 | 456 | 321 
. 
. 
. 
2016-12 | 789 | null 
2016-11 | 321 | null 

は去年に現在の年比較したい月ごと、 その"12行前の結果を表示する"!

+0

はこの答えをチェックしてください歓迎されています。 https://stackoverflow.com/questions/11303532/simulate-lag-function-in-mysql –

+0

あなたのMySQLのバージョンによっては、実際のLAG関数にアクセスすることができます:https://dev.mysql.com/doc/ refman/8.0/ja/window-function-descriptions.html#function_lag –

答えて

0

以前のコメントの中で、アーロンは言ったように:LAG関数は、方法です。 しかし、MySQL 5.7では... LAG関数はありませんので、シミュレート!

だから、-12行の値のワーキングソリューションを比較するには、次のとおりです。

SET @back0=-1; 
SET @back1=-1; 
SET @back2=-1; 
SET @back3=-1; 
SET @back4=-1; 
SET @back5=-1; 
SET @back6=-1; 
SET @back7=-1; 
SET @back8=-1; 
SET @back9=-1; 
SET @back10=-1; 
SET @back11=-1; 

Select * , 
(MyvalueA-MyvalueB) as Myresult, 
@back0 m0, 
@back0:[email protected] m1, 
@back1:[email protected] m2, 
@back2:[email protected] m3, 
@back3:[email protected] m4, 
@back4:[email protected] m5, 
@back5:[email protected] m6, 
@back6:[email protected] m7, 
@back7:[email protected] m8, 
@back8:[email protected] m9, 
@back9:[email protected] m10, 
@back10:[email protected] m11, 
@back11:=(MyvalueA-MyvalueB) m12 

etc.... 

は元の順序:)

なぜこの超安っぽいソリューションを逆に覚えていますか?なぜなら、mysql変数にはArray型がないからです!

誰かが別のエレガントな解決策を持っている場合は、MySQLがLAG機能を実装するためにハックのために

関連する問題