首页 > 解决方案 > 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

标签: mysqlsqldatetimesumintervals

解决方案


来点算术怎么样?

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 岁之间,依此类推。


推荐阅读