计算两行之间的百分比变化

Ani*_*dhi 2 sql

我知道这已经被问到了.但是,我在SQL和MySQL方面相对较新,所以我对其他答案感到困惑.

假设我有一张历史财务数据表,我有多条记录.

Date       | Close Price | % Change
2014-03-25 |    3.58     |   ?
2014-03-24 |    3.57     |   ?
2014-03-21 |    3.61     |   ?
Run Code Online (Sandbox Code Playgroud)

我在表格中有日期和收盘价.我希望每天都能找到%的变化.例如,2014-03-24至2014-03-25约为+ 0.28%.

我完全坚持如何在不运行大量单个查询的情况下为所有记录执行此操作.我认为这是某种加入,但这是我感到困惑的地方,因为我之前没有这样做过.

Kic*_*art 6

我认为这样的事情会这样做

SELECT x.Date, x.Close_Price, (((x.Close_Price / y.Close_Price) - 1) * 100) AS '% Change'
FROM 
(
    SELECT a.Date AS aDate, MAX(b.Date) AS aPrevDate
    FROM SomeTable a
    INNER JOIN SomeTable b
    WHERE a.Date > b.Date
    GROUP BY a.Date
) Sub1
INNER JOIN SomeTable x ON Sub1.aDate = x.Date
INNER JOIN SomeTable y ON Sub1.aPrevDate = y.Date
ORDER BY x.Close_Price DESC
Run Code Online (Sandbox Code Playgroud)

当天不是一个接一个时(例如,非处理日的缺失记录),这将应对.

子查询获取每个日期,以及小于它的最大日期.然后将其连接到表以获取该日期和前一个日期的完整记录,然后可以进行计算.

编辑 - 并根据此SELECT进行更新: -

UPDATE treasury x
INNER JOIN 
(
    SELECT a.Date AS aDate, MAX(b.Date) AS aPrevDate
    FROM treasury a
    INNER JOIN treasury b
    WHERE a.Date > b.Date
    GROUP BY a.Date
) Sub1 ON Sub1.aDate = x.Date
INNER JOIN treasury y ON Sub1.aPrevDate = y.Date
SET x.PercentChange = (((x.Close_Price / y.Close_Price) - 1) * 100)
Run Code Online (Sandbox Code Playgroud)