阅读此主题后:MySQL - Subtracting value from previous row, group by
我使用了最受欢迎的答案中描述的方法并编写了以下代码:
SELECT
T.id_str,
T.created_at,
T.retweet_count,
T.tweeted_at,
if (@lastid_str = T.id_str, T.retweet_count - @lastretweet_count, 0000.00) as RetweetChange,
@lastid_str := T.id_str,
@lastretweet_count := T.retweet_count
FROM
Tweets T,
(SELECT @lastid_str := 0,
@lastretweet_count :=0 ) SQLVars
ORDER BY
T.tweeted_at DESC,
T.id_str;
旧问题解决了,新问题:如何编写触发器。
我的表看起来像这样。其中id_str是特定推文的唯一标识符。由于我每分钟从一个用户插入50条推文,因此会有很多相同的id_str。我想看的是每分钟转换retweet_count。 tweeted_at是用户发推文时,created_at是将此数据插入到我的数据库中。我想为插入数据库的每个新数据生成retweet_change,而不是相同的旧推文(进入列retweet_change)。我应该怎么写触发器?
答案 0 :(得分:0)
特别是在基于网络的解决方案中,计数器和聚合是常见的,数据有点静态(即:旧数据不变,被删除等),并且可以添加新数据,触发器可以提供帮助。
您可以在适当的位置添加一些您想要这些聚合的列。然后,当一个新记录被添加到一个表中时,汇总表(或转发之类的父ID)可以用1或更多来更新,或者如果是其他如金融,订单数量等,则可以更新。这将简化您的计数因为在添加条目时总计会一直运行。
通过预先汇总和更新相关记录,您只需要在触发器到位后准备计数,然后其余部分继续保持同步。