如何解决此代码中SQLite的LEAD功能错误?

时间:2018-10-31 22:40:40

标签: sqlite syntax-error

我正在使用SQLite并尝试使用Lead函数,但是我一直从数据库浏览器中收到一条错误消息(粘贴在下面)。有人知道这个问题是什么吗?另外,能否请您在思考过程中告诉我如何调试以下错误?提前谢谢你

我的密码

SELECT Day.Close, Day.Open, Day.Close - Day.Open AS Movement1, LEAD Day.Close OVER (ORDER BY Day.High) AS Movement2 FROM ES_SourceNT_Day_ADX14 AS Day;

来自数据库浏览器的响应

near ".": syntax error: SELECT Day.Close, Day.Open, Day.Close - Day.Open AS Movement1, LEAD Day.

1 个答案:

答案 0 :(得分:1)

似乎您忘记了"N/A末尾的引号,并且如果您只有一个表,则可以显式指定表名(甚至指定一个表别名开头)是多余的,因此您的查询可以写为

SELECT Close, Open, Close - Open AS Movement1, LEAD (Close, 1, "N/A") OVER (ORDER BY High) AS Movement2 FROM ES_SourceNT_Day_ADX14;

但这不是问题。实际上,如果您使用的是SQLite 3.25.0或更高版本,则没有问题,但是不幸的是,较早的版本不支持窗口功能。 参见changelist

关于我的思考过程,起初我只是想简化您的查询,删除所有看起来正确的东西,以找到最小的bug repro,即尽可能短的代码仍然产生错误。我尽力将其缩短为

SELECT lead(High) OVER (ORDER BY High) FROM ES_SourceNT_Day_ADX14;

然后

SELECT row_number() OVER (ORDER BY High) FROM ES_SourceNT_Day_ADX14;

仍然没有用,我也不知道为什么,但是我开始变得可疑了。 我查找了official documentation,并尝试运行最简单的示例,但无济于事。那时我才知道。 SQLite已经过良好的测试,如果这么大的功能集根本无法使用,最可能的解释是它不应该起作用,至少在此版本中不起作用。 阅读变更单证实了我的理论。