【发布时间】:2019-08-21 02:00:58
【问题描述】:
我正在使用 python 3.6.4 和 sqlite3 2.6.0 在 sqlite 3.27.2 文件中查询我的表中最近的连续日期。
我尝试使用 vscode 调试器获取实际的 sql 字符串并使用 DB Browser for SQLite 对其进行测试。它按我的预期工作。
代码如下:
sql = 'WITH \
dates(cast_date) AS (\
SELECT DISTINCT play_date\
FROM TimeTable\
),\
groups AS (\
SELECT\
date(cast_date, \'-\'||(ROW_NUMBER() OVER (ORDER BY cast_date))||\' days\') AS grp,\
cast_date\
FROM dates\
)\
SELECT\
MIN(cast_date) AS date_start,\
MAX(cast_date) AS date_end\
FROM groups GROUP BY grp ORDER BY 2 DESC LIMIT 1'
cursor = conn.cursor()
result = []
try:
cursor.execute(sql)
result = cursor.fetchone()
except sqlite3.OperationalError:
FileLogger.exception('Exception at '+__file__+' '+__name__)
发生异常:
cursor.execute(sql)
sqlite3.OperationalError: near "OVER": syntax error
【问题讨论】:
-
您使用的是什么版本的 SQLite?并非所有版本都支持窗口函数。
-
一般来说,如果你有一个多行的字符串,你可能想要使用三重引号(
'''或""")。 -
不相关但考虑使用
'''(多行字符串)而不是反斜杠。它可以让你的生活更轻松。 -
我现在使用的是 2.6.0 的 sqlite3 和 3.27.2 的 sqlite 文件。可悲的是
'''并没有解决这个问题。