我有两张桌子:
twitterusers用户表

twittergrowth表

我试图连接这两个表,从twitteruser获取所有字段,从twittergrowth获取选择性字段,然后从这些数据中获取最后3行。
预期输出:

电流输出:

也就是说,这些行在重复。我想要由ID或用户名和最后一组时间戳组成的唯一行。因此,这将是最后的3行,其中有最近的时间戳。
我可以输入的代码是:
SELECT
t1.*,
t2.new_followers_count,
t2.new_friends_count,
t2.new_timestamp
FROM twitterusers t1
JOIN twittergrowth t2 on (t1.username=t2.username)搜索了相当多的网页/网站,但实际上无法找到如何做到这一点。我很感谢你的帮助。:)
此外,我希望将一个LIMIT参数添加到最终结果中,这样就可以对整个结果进行分页。
发布于 2015-06-17 00:42:54
首先,您需要在new_timestamp表中相同的user_id和username的组中找到最大的twittergrowth (最新)。这是一个典型的按组划分的最大问题,子查询tgmax就是这样做的。然后,您需要返回相同的表(这次是tg),以获得其他列,这些列不在子查询的group子句中,并且不用于聚合函数(如max())。这些列是new_followers_count和new_friends_count。
如果尝试将它们放入子查询的选择中,mysql将从同一组中返回来自未指定行的值,而不一定与具有最新时间戳的行返回值。这是解释这里。
一旦您获得twittergrowth表的期望输出,只剩下加入twitterusers表来获取所有其他列。
SELECT tu.*, tg.new_followers_count, tg.new_friends_count, tg.new_timestamp
FROM twitterusers tu
JOIN twittergrowth tg
ON tu.user_id = tg.user_id AND tu.username = tg.username
JOIN
( SELECT tgg.user_id, tgg.username, max(tgg.new_timestamp) as latest_timestamp
FROM twittergrowth tgg
GROUP BY tgg.user_id, tgg.username ) tgmax
ON tg.user_id = tgmax.user_id AND tg.username = tgmax.username
AND tg.new_timestamp = tgmax.latest_timestamp请注意,此查询将受益于(user_id,username,new_timestamp)表中的twittergrowth复合索引。
发布于 2015-06-16 22:37:40
您需要按组来实现预期的输出。
GROUP BY id要限制结果或将结果拆分为页面,只需添加LIMIT X,Y,其中X是起始记录,Y是记录总数。
因此,查询以获取所需的预期结果,但只有前10项如下所示:
SELECT
t1.*,
t2.new_followers_count,
t2.new_friends_count,
t2.new_timestamp
FROM twitterusers t1
JOIN twittergrowth t2 on t1.username=t2.username
GROUP BY t1.id
LIMIT 0,10https://stackoverflow.com/questions/30879406
复制相似问题