1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| -- 原数据 +------+------+ | year | sale | +------+------+ | 1990 | 50 | | 1991 | 51 | | 1992 | 52 | | 1993 | 52 | | 1994 | 50 | | 1995 | 50 | | 1996 | 49 | | 1997 | 55 | +------+------+ -- 要求查出销售增减情况 select s1.year,s1.sale,s1.sale-s2.sale from sales as s1, sales as s2 where s2.year=s1.year-1; +------+------+-----------------+ | year | sale | s1.sale-s2.sale | +------+------+-----------------+ | 1991 | 51 | 1 | | 1992 | 52 | 1 | | 1993 | 52 | 0 | | 1994 | 50 | -2 | | 1995 | 50 | 0 | | 1996 | 49 | -1 | | 1997 | 55 | 6 | +------+------+-----------------+ -- TODO:添加1990年的数据 -- 时间有断层的情况 +------+------+ | year | sale | +------+------+ | 1990 | 50 | | 1992 | 52 | | 1993 | 52 | | 1994 | 50 | | 1997 | 55 | +------+------+ select s1.year,s1.sale,s1.sale-s2.sale from sales as s1, sales as s2 where s2.year=(select max(s3.year) from sales s3 where s1.year>s3.year); -- 其中select max(s3.year) from sales s3 where s1.year>s3.year表示过去的年份中最近的一个即上一行 +------+------+-----------------+ | year | sale | s1.sale-s2.sale | +------+------+-----------------+ | 1992 | 52 | 2 | | 1993 | 52 | 0 | | 1994 | 50 | -2 | | 1997 | 55 | 5 | +------+------+-----------------+ -- 若想出现1990年的数据则把上述sql改成外连接 select s1.year,s1.sale,s1.sale-s2.sale from sales as s1 left join sales as s2 on s2.year=(select max(s3.year) from sales s3 where s1.year>s3.year) order by s1.year; +------+------+-----------------+ | year | sale | s1.sale-s2.sale | +------+------+-----------------+ | 1990 | 50 | NULL | | 1992 | 52 | 2 | | 1993 | 52 | 0 | | 1994 | 50 | -2 | | 1997 | 55 | 5 | +------+------+-----------------+
|