【问题标题】:SQLITE3 GROUP BY "anniversary date"SQLITE3 GROUP BY "周年纪念日"
【发布时间】:2019-11-12 21:04:42
【问题描述】:

我的数据以这种格式存储在 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

容易吗?

【问题讨论】:

  • 试试这个:SELECT STRFTIME("%Y-%m", ts) as avYear, SUM() FROM () GROUP BY avYear ORDER BY ts

标签: sqlite


【解决方案1】:

您可以通过以下表达式获取您的情况中的 年份

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

请参阅demo

【讨论】:

  • 令人印象深刻!非常感谢@forpas。您利用布尔值是定义明确的整数(0 假和 1 真)这一事实。只要日期大于周年月和日,年份就会自动递增。你做到了,非常好!再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-11
  • 1970-01-01
  • 2011-02-21
  • 1970-01-01
  • 2022-08-04
相关资源
最近更新 更多