简体   繁体   English

按 6 个月窗口聚合的 SQL

[英]SQL Aggregating by 6 month windows

Is there a better way of using SQL (mysql) to aggregate by 6 month windows?有没有更好的方法使用 SQL (mysql) 聚合 6 个月的窗口? This seems to perform okay gets the relevant data in the normal case, but is obviously limited.这在正常情况下似乎执行还可以获取相关数据,但显然是有限的。

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

How about a little arithmetics?来点小算术怎么样?

select sum(...) some_aggg, 
   floor(timestampdiff(month, some_date, now()) / 6) recency
where ...
group by recency
order by recency

recency gives you an integer value that starts at 0 (the date is less than 6 months old) and increments by 1 for every 6 month period: 1 means between 6 months and 1 year old, and so on. recency为您提供一个从0开始的整数值(日期小于 6 个月),每 6 个月递增 1: 1表示介于 6 个月和 1 岁之间,依此类推。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM