1

我有这个 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)

有什么建议么?

4

1 回答 1

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)
于 2013-05-31T18:55:14.613 回答