【发布时间】:2017-07-30 06:29:17
【问题描述】:
我必须计算用户在接下来的 7 天内(天数必须灵活)或更多的重复次调用。 查询应该只考虑比表中最后一个日期早 7 天的记录。
我的数据看起来像这样:
call_date user
2017-05-01 100
2017-05-01 500
2017-05-02 200
2017-05-02 300
2017-05-03 300
2017-05-04 100
2017-05-05 400
2017-05-06 500
2017-05-07 600
2017-05-08 200
2017-05-09 700
2017-05-10 500
2017-05-11 400
2017-05-12 300
2017-05-13 100
2017-05-14 200
查询的期望输出是:
call_date user count
2017-05-01 100 2
2017-05-01 500 2
2017-05-02 200 2
2017-05-02 300 2
2017-05-03 300 1
2017-05-04 100 1
2017-05-05 400 2
2017-05-06 500 2
2017-05-07 600 1
解释:
- 在列出应考虑第一个联系人的日期时(
user100 调用2017-05-01、2017-05-04和2017-05-13)但仅显示2017-05-01 - 对于
user100,只应考虑7 天内 的记录,因此user100 的count变为2(2017-05-01和2017-05-04; 排除2017-05-13因为超出范围)为call_date2017-05-01 -
2017-05-07之后的记录不被考虑,因为它是比最大日期早 7 天的日期,即2017-05-14
此查询必须在 25+ 百万条记录上运行,因此优化的查询将增加优势。
我不太确定如何解决这个问题;非常感谢您对查询的详细解释。
【问题讨论】:
-
非常感谢您对所需输出的详细说明。除了使用
rand(),至少对我来说,你的计数毫无意义。 -
进一步解释@Solarflare 请求:用户 100 和 call_date 5/1/2017 的 2 计数从何而来?用户 500 和 call_date 5/1/2016 的 0 计数从何而来? ...等等。
-
检查是否有任何 these 与您要查找的内容接近。
-
@Solarflare 我已经添加了解释。
-
@joanolo。您能否将您的查询添加为答案,以便我接受。谢谢。