此查询返回时间戳之间差异小于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
答案 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
如果您有任何疑问,请与我们联系!