Fab*_*abi 1 mysql sql group-by sql-order-by
我有这个查询,它返回以下屏幕截图中的(正确)结果:
SELECT owner_id, MAX(ctime) as post_time, aid
FROM `jul_cpg15x_pictures`
GROUP BY aid
ORDER BY aid DESC
Run Code Online (Sandbox Code Playgroud)

但我需要以下格式的查询(因为我想在之后进行一些连接):
SELECT * FROM
(SELECT owner_id, MAX(ctime) as post_time, aid
FROM `jul_cpg15x_pictures`
GROUP BY aid
ORDER BY aid DESC) q
Run Code Online (Sandbox Code Playgroud)
此查询返回不同的结果(某些owner_ids不同):

这让我疯狂了几个小时,怎么会这样?我仔细检查了表中的ctime是不同的,并且没有发生两次.但是例如对于ctime 1410003221,肯定只有一个条目(owner_id = 8的条目).
非常感谢你的任何帮助或提示.
这个查询:
SELECT owner_id, MAX(ctime) as post_time, aid
FROM `jul_cpg15x_pictures`
GROUP BY aid
ORDER BY aid DESC
Run Code Online (Sandbox Code Playgroud)
使用部分组.您正在选择未聚合的值owner_id和aid列,但您只是按分组进行分组aid.MySQL可以为给定的组自由返回任何内容 .该子句没有帮助,因为在分组后执行排序.owner_idaidORDER BY
因此,如果您的数据如下:
owner_id ctime aid
-------- ---------- ---
8 1410003221 176
2 1410000000 176
Run Code Online (Sandbox Code Playgroud)
然后两个结果都是正确的(由于相同的帮助,两个行都折叠为一个,最大ctime按预期计算,但可以返回任一行的owner_id):
owner_id post_time aid
-------- ---------- ---
8 1410003221 176
Run Code Online (Sandbox Code Playgroud)
owner_id post_time aid
-------- ---------- ---
2 1410003221 176
Run Code Online (Sandbox Code Playgroud)
说了这么多,如果你打算抓住owner_id给定的最新帖子,aid你可以像这样编写你的查询:
SELECT s1.aid, s1.ctime, s1.owner_id
FROM jul_cpg15x_pictures s1
JOIN (
SELECT aid, MAX(ctime) AS ctime
FROM jul_cpg15x_pictures
GROUP BY aid
) AS s2 ON s1.aid = s2.aid AND s1.ctime = s2.ctime
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
63 次 |
| 最近记录: |