2017-07-25 58 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。問題是,它顯示下一個值而不是前一個值。 –

相關問題