MYSQL - 自已加入已有别名的查询(别名的别名?)

时间:2017-12-07 16:16:20

标签: 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行前的结果" ! 任何的想法 ?

1 个答案:

答案 0 :(得分: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:=@back1 m1,
@back1:=@back2 m2,
@back2:=@back3 m3,
@back3:=@back4 m4,
@back4:=@back5 m5,
@back5:=@back6 m6,
@back6:=@back7 m7,
@back7:=@back8 m8,
@back8:=@back9 m9,
@back9:=@back10 m10,
@back10:=@back11 m11,
@back11:=(MyvalueA-MyvalueB) m12

etc....

请记住撤消原始订单:)

为什么这个超级糟糕的解决方案?因为mysql变量中没有数组类型!

如果有人有另一个优雅的解决方案,欢迎您