SQLite分组查询问题求助:按课程小节计算日期差值失败
问题排查与修正
你的SQL语句存在两个关键问题:
- 嵌套子查询返回多行结果,用
=匹配会报错:那个子查询会返回所有不重复的小节ID,是一个多行结果集,而=只能匹配单个值,这会直接导致查询失败。而且这个WHERE条件完全多余,根本不需要筛选ID。 - 缺少必要的分组逻辑:你要按课程小节(ID)分组计算,但原语句没有
GROUP BY ID,这会导致整个表只计算一次全局的最早/最晚日期差,而不是每个小节单独计算。
修正后的SQL语句如下:
query = ''' SELECT ID as id, CAST((JulianDay(max(added)) - JulianDay(min(added))) as INTEGER) as num_days_passed FROM course_subsections GROUP BY ID ORDER BY num_days_passed DESC '''
说明:
GROUP BY ID:按课程小节ID分组,确保每个小节单独计算日期差max(added)和min(added):分别取当前小节下课程添加的最晚、最早日期JulianDay():将日期转换为儒略日数,相减后得到天数差,用CAST(...) as INTEGER取整得到整数天数- 省略了多余的表名前缀(无表别名冲突时可省略),语句更简洁
内容的提问来源于stack exchange,提问作者user202004
相关产品推荐
相关产品推荐

