2017-07-25 41 views
0

假设我有下表,让它成为表“A”。如何从数据库中获取以前的行值?

Select * FROM A; 
    ID  Score 
    1  25 
    2  36 
    3  12 
    4  14 

我想查询其选择以升序得分,并且还先前得分值(存储在新创建的列“prev_score”)如下所示的一个。

ID  Score  Prev_Score 
    3  12   0 
    4  14   12 
    1  25   14 
    2  36   25 

这可以使用单个sql查询来完成吗?

+2

是的,可以这样做。 –

+0

在同一个表格或其他地方是Prev_Score。您还没有给我们太多的要求。 – Option

+1

我不知道直接的解决方案。但是,你想达到什么目的? –

回答

2

您可以使用相关子查询是可以获得以前值做到这一点:

SELECT t1.ID, t1.Score, 
     COALESCE((SELECT Score 
       FROM mytable AS t2 
       WHERE t2.Score < t1.Score 
       ORDER BY t2.Score LIMIT 1), 0) AS Previous 
FROM mytable AS t1 
ORDER BY t1.Score DESC; 

Demo here

编辑:

如果你想按升序排列得分则只需切换ASC/DESC关键字:

SELECT t1.ID, t1.Score, 
     COALESCE((SELECT Score 
       FROM mytable AS t2 
       WHERE t2.Score > t1.Score 
       ORDER BY t2.Score DESC LIMIT 1), 0) AS Previous 
FROM mytable AS t1 
ORDER BY t1.Score; 
+0

非常感谢。不过,我想要按升序进行评分。我尝试删除DESC。它命令升序得分,但获取下一个得分 –

+0

@DeekshithBanjan然后你应该编辑OP来反映这个要求。只需切换ASC/DESC关键字即可。 –

+0

对不起,但我试过把它切换到ASC。问题是,它显示下一个值而不是前一个值。 –

相关问题