阅读此线程后:MySQL - Subtracting value from previous row, group byMySQL错误1064使用SQLVars
我用过的最upvoted答案中描述的方法,并写了下面的代码:
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列相比)。我应该如何编写触发器?
您在“T.tweeted_at”列后缺少逗号。现在看看它是否有效,正如你预期的那样。有一个干净的格式化可读查询有助于错过这样简单的事情:)但它只是习惯于格式化的习惯,因为你学习。另外,我认为您需要首先更改ID_Str的顺序,因为它似乎是您的IF()比较工作的分组基础 – DRapp
!谢谢。我无法想象这是一个如此愚蠢的错误。 – Dylan
而不是做这个任务的查询,有没有办法创建一个生成的列,以便我可以在MySQL中插入数据时自动计算数据?我的数据库设计如下:每分钟插入50个新行,我有一个自动递增的主键。所以我想我可以这样做:选择最新插入的50行(Max(id)to Maxid - 50)将它们与之前插入的50行(Max(id)-50,Max(id)-100)进行比较if id_str是相同的计算转推差异? – Dylan