我在面试时被问到这个问题,而且我不能完全做到这一点
你有一张表,你有date,user_id,song_id和count。它在每天结束时显示用户听过给定歌曲的次数。因此,计数是累积总和。
问题:您必须在第二个表格上每天更新基于,该表格会在用户收听某首歌曲时实时记录。基本上,在每天结束时,您转到第二个表并拉出每个用户/歌曲组合的计数,然后将此计数添加到具有生命周期计数的第一个表中。如果这是用户第一次收听某首歌曲,那么您将不会在生命周期表中使用该对,因此您必须在那里创建该对,然后添加最后一天的计数。
我的回答:在生命时间计数和最后一天计数之间使用完全外部联接,然后将两者相加......但是无法更新表格。
任何帮助?
答案 0 :(得分:1)
你可以使用MySQL相当于“upsert”来做到这一点:on duplicate key update
。像这样:
insert into history(date, user_id, song_id, count)
select date(rt.datetime), rt.user_id, rt.song_id, count(*)
from realtime rt
where rt.datetime >= curdate() - interval 1 day and
rt.datetime < curdate()
group by rt.user_id, rt.song_id
on duplicate key update count = count + values(count);
我应该回答你的答案更加错误,因为MySQL不支持full outer join
。