在SQL中,如何引用一个行,其中的日期是我所在行的日期之前最接近的行?

时间:2013-05-31 18:45:17

标签: mysql sql

我有这个SQL语句,但它只有在我所有日期都是顺序时才有效。我的数据不包括工作日,假日或停电日,所以可能会有7天的差距,所以我需要一个更好的方法来引用前一天的行。

update fdd1
    set fdd1.Prior_Open = fdd2.Day_Open,
          fdd1.Prior_Close = fdd2.Day_Close
    from full_daily_data fdd1
    inner join full_daily_data fdd2
    on fdd2.Trade_Date = DATE_SUB(fdd1.Trade_Date, INTERVAL 1 DAY)

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

这应该计算fdd1.Trade_Date之前的最近日期,而不考虑差距;您查询的唯一更改是在最后(on fdd2.Trade_Date =之后):

update fdd1
set fdd1.Prior_Open = fdd2.Day_Open,
      fdd1.Prior_Close = fdd2.Day_Close
from full_daily_data fdd1
inner join full_daily_data fdd2
on fdd2.Trade_Date = (
   SELECT MAX(fddsub.Trade_Date)
   FROM full_daily_data fddsub
   WHERE fddsub.Trade_Date < fdd1.Trade_Date)