如何在SQLite中按年月统计Executed、Scheduled、Cancelled的预订数量?
SQLite按年月统计不同状态预订数量的解决方案
核心思路
借助SQLite的strftime()函数提取starttime的年月信息,结合条件聚合实现分状态统计,最后按年月分组排序得到结果。
示例SQL语句
假设你的预订表名为bookings,执行以下查询即可:
SELECT strftime('%Y-%m', starttime) AS year_month, COUNT(CASE WHEN status = 'Executed' THEN 1 END) AS executed_count, COUNT(CASE WHEN status = 'Scheduled' THEN 1 END) AS scheduled_count, COUNT(CASE WHEN status = 'Cancelled' THEN 1 END) AS cancelled_count, COUNT(*) AS total_count -- 可选:统计当月总预订量 FROM bookings WHERE starttime BETWEEN '2020-01-01' AND '2022-12-31' GROUP BY year_month ORDER BY year_month;
语句说明
strftime('%Y-%m', starttime):把starttime转换为YYYY-MM格式的年月字符串,作为分组的核心依据。COUNT(CASE WHEN ... THEN 1 END):通过条件判断筛选对应状态的记录,不符合条件的返回NULL,COUNT()会自动忽略NULL值,实现精准统计。WHERE子句:严格限定时间范围在2020-2022年,过滤无关数据。GROUP BY+ORDER BY:按年月分组后排序,保证结果按时间顺序展示。
注意事项
- 如果你的表名不是
bookings,请替换为实际表名。 - 确保
status字段的取值与SQL中的字符串完全匹配(SQLite默认大小写敏感),若存在大小写不一致的情况,可改用LOWER(status)统一转换后判断,例如CASE WHEN LOWER(status) = 'executed' THEN 1 END。
内容的提问来源于stack exchange,提问作者RG Rauniyar
相关产品推荐
相关产品推荐

