我有一个包含这些列的数据集:
- 日期
- 代码
- 链接
- 点击次数
每个代码代表一个人,我的目标是找到某人发布每个链接的首次日期以及每个链接的点击次数。要被视为合法帖子,链接必须至少获得 100 次点击。这个查询几乎可以满足我的需要:
select
min(date) as post_date,
max(date) as last_click,
link,
code,
sum(clicks) as clicks
from table1
where date >= '2017-01-01'
group by link, code
having sum(clicks) > 100
问题是此查询为我提供了为具有 100 次以上点击的链接注册的任何点击的第一个日期。例如:
PersonA 在 1 月 1 日获得了 1 次链接 A 的点击。 1 月 7 日,链接 A 的总点击次数达到 100+。现在这个查询在 1 月 1 日返回,而我需要它在 1 月 7 日返回。
我希望我说得足够清楚(再次对此非常陌生)。任何帮助将不胜感激! :)
最佳答案
这很棘手。我认为您需要为此使用变量,以便获得点击次数的累计总和(实际上,您也可以使用相关子查询):
select min(date) as post_date, max(date) as last_click,
link, code,
max(running_clicks) as clicks
from (select t1.*,
(@c := if(@lc = concat_ws(':', link, code), @c + clicks,
if(@lc := concat_ws(':', link, code), clicks, clicks)
)
) as running_clicks
from table1 t1 cross join
(select @rn := 0, @lc := '') params
where t1.date >= '2017-01-01'
order by link, code
) t
group by link, code
having running_clicks - clicks > 100;
关于mysql - 挣扎于最小(日期)解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41886379/