Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL中尝试将当前行与时间顺序表中的下一行配对时出现未知列错误_Sql - Fatal编程技术网

在SQL中尝试将当前行与时间顺序表中的下一行配对时出现未知列错误

在SQL中尝试将当前行与时间顺序表中的下一行配对时出现未知列错误,sql,Sql,有一个表stockprice,其中包含一家公司股票交易的信息。它有两列:时间戳和价格。它们代表交易发生的时间和销售价格。表中记录的自然顺序是随机的,不按时间戳排序 您添加了另一列,我们称之为delta,您打算在其中存储当前交易价格与前一交易价格之间的差异 编写一条SQL语句,它将计算差价并在所有行中用它填充列增量 我按照下面的方式编写sql在mysql上运行,我无法继续,下面是我到目前为止编写的用于计算当前交易价格与上一次交易价格之间的差异的sql,mysql在“field list”错误中给了

有一个表stockprice,其中包含一家公司股票交易的信息。它有两列:时间戳和价格。它们代表交易发生的时间和销售价格。表中记录的自然顺序是随机的,不按时间戳排序

您添加了另一列,我们称之为delta,您打算在其中存储当前交易价格与前一交易价格之间的差异

编写一条SQL语句,它将计算差价并在所有行中用它填充列增量

我按照下面的方式编写sql在mysql上运行,我无法继续,下面是我到目前为止编写的用于计算当前交易价格与上一次交易价格之间的差异的sql,mysql在“field list”错误中给了我未知列“previous.price”,因为第一行的前一行是nothing,一些专家能想出解决这个问题的办法吗

 SELECT
   `current`.timestamp,
   `current`.price,
   `current`.price - IFNULL(`previous`.price, 0) AS delta
   FROM
   stockprice       AS `current`
LEFT JOIN
   stockprice       AS `next`
      ON `next`.timestamp = (SELECT MIN(timestamp)
                               FROM stockprice
                              WHERE timestamp > `current`.timestamp)
My database like:
timestamp                 price
2011-10-27 00:00:00       12424
2011-10-24 00:00:00       15464
2011-10-25 00:00:00       543464
2011-10-23 00:00:00       58791

决定是处理下一个时间戳还是前一个时间戳:

SELECT `current`.timestamp,
       `current`.price,
       `current`.price - IFNULL(`previous`.price, 0) AS delta
  FROM stockprice       AS `current`
  LEFT JOIN stockprice  AS `previous`
    ON `previous`.timestamp = (SELECT MAX(timestamp)
                                 FROM stockprice
                                WHERE timestamp < `current`.timestamp)
或避免使用反勾号:

SELECT C.timestamp,
       C.price,
       C.price - IFNULL(P.price, 0) AS delta
  FROM stockprice       AS C
  LEFT JOIN stockprice  AS P
    ON P.timestamp = (SELECT MAX(S.timestamp)
                        FROM stockprice AS S
                       WHERE S.timestamp < C.timestamp)
“字段列表”中的未知列“previous.price”


我在这个查询中没有看到任何会导致该错误的内容。您确定这就是您正在运行的整个查询吗?这与第一个要加入的记录没有“先前”记录无关。这意味着没有名为previous的表或别名以及名为price的列。

如果这是家庭作业,请添加家庭作业标记时间戳列上是否存在唯一约束主键约束?请编写问题标题,提供有关问题的有用信息。我们知道这是关于sql的,因为您将其标记为sql。我们知道这是一个问题,因为你发布了一个问题。现在的题目又难sql了,需要专家吗?不添加任何内容。添加数据库架构、一些示例数据、示例结果,这样会更容易帮助您。@Jonathan Leffler:是的,主键在时间戳列上表示错误已解决,但结果返回似乎不正确。您是否尝试了带有“>”或“错误已解决”的版本,但返回结果仍然不正确,检查Jonathan Leffler的溶液,