我有这个查询,它会在下面的屏幕截图中返回(正确的)结果:
SELECT owner_id, MAX(ctime) as post_time, aid
FROM `jul_cpg15x_pictures`
GROUP BY aid
ORDER BY aid DESC
但是我需要以下格式的查询(因为我想在之后进行一些连接):
SELECT * FROM
(SELECT owner_id, MAX(ctime) as post_time, aid
FROM `jul_cpg15x_pictures`
GROUP BY aid
ORDER BY aid DESC) q
此查询返回不同的结果(某些owner_ids不同):
这让我疯狂了几个小时,怎么会这样? 我仔细检查了表中的ctime是不同的,并且没有发生两次。但是例如对于ctime 1410003221,肯定只有一个条目(owner_id = 8)。
非常感谢您的任何帮助或提示。
答案 0 :(得分:5)
此查询:
SELECT owner_id, MAX(ctime) as post_time, aid
FROM `jul_cpg15x_pictures`
GROUP BY aid
ORDER BY aid DESC
使用部分群组。您选择的是owner_id
和aid
列的未聚合值,但您只能按aid
进行分组。对于给定的owner_id
组,MySQL可以免费返回任何 aid
。 ORDER BY
子句无效,因为在分组后执行排序。
因此,如果您的数据如下:
owner_id ctime aid
-------- ---------- ---
8 1410003221 176
2 1410000000 176
然后两个结果正确(由于相同的帮助,两个行都折叠为一个,最大ctime按预期计算,但可以返回任一行的owner_id):
owner_id post_time aid
-------- ---------- ---
8 1410003221 176
owner_id post_time aid
-------- ---------- ---
2 1410003221 176
说了这么多,如果你打算抓住给定owner_id
的{{1}}最新帖子,你可以写下这样的查询:
aid
答案 1 :(得分:1)
尝试以下操作,如果需要,您可以从表中添加更多列:
select t.owner_id, t.aid, t.ctime
from jul_cpg15x_pictures t
join (select aid, max(ctime) as last_post_time,
from jul_cpg15x_pictures
group by aid) v
on t.aid = v.aid
and t.ctime = v.last_post_time
order by t.aid desc
如您所说,根据您的意见,此查询将显示每个援助的最后一个post_time,然后显示相应的owner_id。