sqlite - SQLITE3 GROUP BY "周年纪念日"
问题描述
我的数据以这种格式存储在 SQLITE3 数据库中:
id | ts | data ...
475158|2019-11-12 07:50:00 | ...
所以我过去常常按日、月、年分组,例如:
SELECT STRFTIME("%Y-%m", ts), SUM(<data in my table>)
FROM ( <my table> )
GROUP BY STRFTIME("%Y-%m", ts)
ORDER BY ts
现在我想做同样的事情,但基于周年纪念日。
例如,如果周年日期是 2010-11-17,我想得到一个按年份分组但在 'YYYY'-11-17 和 'YYYY+1'-11-16 之间的结果
例子:
2017 |sum of data between 2016-11-17 & 2017-11-16
2018 |sum of data between 2017-11-17 & 2018-11-16
2019 |sum of data between 2018-11-17 & 2019-11-16
容易吗?
解决方案
您可以通过以下表达式获得您的年份:
strftime('%Y', ts) + (substr(ts, 6, 5) >= '11-17')
这样做:
select
strftime('%Y', ts) + (substr(ts, 6, 5) >= '11-17') year,
sum(data) total
from tablename
group by year
请参阅演示。
推荐阅读
- treeview - TreeView 作为垂直菜单 - 如何获取关联 MenuItem 的名称
- javascript - 单击带有模板行的 v-data-table 中的行
- css - Rails 应用程序不会自动更新 CSS 中的更改
- java - Java Streams:获取列表中一组字符的总和
- python - 数据库或数据结构在某些条件下有效地找到最近的邻居
- html - 使用 Dinky 主题更改 GitHub 页面的帖子/页面内容的宽度
- postgresql - 使用 Ecto Fragments 将时间间隔添加到时间戳
- javascript - 如果需要超过一定时间,节点 js 暂停执行语句
- ruby-on-rails - 错误-'未定义的局部变量或方法'arams'',但我的代码中没有arams
- java - 为什么我没有初始化局部变量“计时器”?