GROUP BY id在ORDER BY时间之后

时间:2014-08-04 05:30:44

标签: mysql sql

此查询返回时间戳之间差异小于180秒的所有项目。

问题是,在完成所有这些操作之后,我需要将结果限制为每个facebook_id的最近一个条目。

我尝试使用GROUP BY facebook_id,但它不起作用,因为如果我在ORDER BY' time'之前我是GROUP BY facebook_id,它会选择较旧的条目而不是较新的条目而不是什么条目我想要。

ORDER BY之后有没有办法进行GROUP BY?

SELECT facebook_id, 
TIMESTAMPDIFF(SECOND, `time`, '$mytime') AS `timediff`
FROM `table`
WHERE `facebook_id` != $fbid
HAVING `timediff` <= '180'
ORDER BY `time` DESC

感谢您的帮助!

注意:我确实尝试过这个问题的建议解决方案,但没有成功。 GROUP BY after ORDER BY

2 个答案:

答案 0 :(得分:2)

您可以通过计算时间列的最大值来使用自联接,并使用facebook_id和第2个条件加入,以匹配从表到第二个查询的max_time的时间,该查询将返回最近针对每个facebook_id

的条目
SELECT t.*, 
TIMESTAMPDIFF(SECOND, `time`, '$mytime') AS `timediff`
FROM `table` t
JOIN (
SELECT facebook_id,MAX(`time`) max_time FROM `table` GROUP BY facebook_id
) t1
ON(t.facebook_id= t1.facebook_id AND t.`time` = t1.max_time)
WHERE t.`facebook_id` != $fbid
HAVING `timediff` <= '180'
ORDER BY t.`time` DESC

答案 1 :(得分:1)

 SELECT fid, timediff
 FROM (
          SELECT facebook_id as fid, 
          TIMESTAMPDIFF(SECOND, `time`, '$mytime') AS timediff
          FROM `table`
          WHERE `facebook_id` != $fbid
          HAVING `timediff` <= '180'
          ORDER BY `time` DESC
         ) entries
 GROUP BY entries.fid

如果您有任何疑问,请与我们联系!