【问题标题】:SQL Aggregating by 6 month windowsSQL 聚合按 6 个月的窗口
【发布时间】:2020-09-25 20:18:47
【问题描述】:

有没有更好的方法使用 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

【问题讨论】:

标签: mysql sql datetime sum intervals


【解决方案1】:

来点算术怎么样?

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

【讨论】:

  • timestampdiff :)(编辑建议)在日期字段中突出数据错误的奖励
猜你喜欢
  • 1970-01-01
  • 2022-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-27
相关资源
最近更新 更多