mysql - SQL 聚合按 6 个月的窗口
问题描述
有没有更好的方法使用 SQL (mysql) 来聚合 6 个月的窗口?这在正常情况下似乎可以获取相关数据,但显然是有限的。
SELECT SUM(...) some_aggg,
(CASE
WHEN SOME_DATE > DATE_SUB(now(), INTERVAL 6 MONTH) THEN 3
WHEN SOME_DATE > DATE_SUB(now(), INTERVAL 12 MONTH) THEN 2
WHEN SOME_DATE > DATE_SUB(now(), INTERVAL 18 MONTH) THEN 1
ELSE 0
END) RECENCY
WHERE ...
GROUP BY RECENCY
ORDER BY RECENCY DESC
解决方案
来点算术怎么样?
select sum(...) some_aggg,
floor(timestampdiff(month, some_date, now()) / 6) recency
where ...
group by recency
order by recency
recency
给你一个整数值,从0
(日期小于 6 个月)开始,每 6 个月递增 1:1
表示介于 6 个月和 1 岁之间,依此类推。
推荐阅读
- delphi - 在 VCL 中连接 SearchBox 和 ListBox
- javascript - 我需要一个包作为 devDependency 和依赖项
- c++ - asio::io_context 和 asio::thread_pool 有什么区别?
- javascript - Reactjs - 使用 React Hooks 获取 div/图像的高度
- build.gradle - Gradle 错误:在根项目中找不到任务“清理”
- android - 我想在 Node Js 服务器中上传图片时添加 ID
- asp.net-core - 如何从asp.net核心中的另一个动作返回视图
- c# - 返回枚举中的字符串值
- c - 无法在 vscode 中调试
- c - 编译器在第二次定义时未将有效内存分配给变量