[英]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.