
可以简化为以下内容(
ORDER BY子查询中的没用):
SELECt * FROM tableGROUP BY title
为什么您认为自己需要
JOIN?(好的,这已通过评论解决)。
在对每个标题(具有最大时间戳的行)进行注释之后,这将完成工作:
SELECt t.* FROM table AS t JOIN ( SELECt title, MAX(timestamp) AS maxts FROM table GROUP BY title ) AS grp ON grp.title = t.title AND grp.maxts = t.timestampORDER BY t.timestamp DESC
作为记录,您的原始查询:
SELECt * FROM ( SELECt * FROM table ORDER BY timestamp DESC ) mGROUP BY title
可能会 按预期工作,但是: 仅 在MySQL中,它允许您
SELECT在
GROUPBY子句中(或依赖于这些子句)的列表字段中使用,而其中没有任何聚合函数。因此,以上查询将为每个标题返回一个 或多或少的随机
行。实际上,它将返回找到标题的第一行。因此,首先运行子查询(按排序
timestamp DESC)将导致首先找到时间戳最大的行。
但是,仅由于(当(如果)时)优化器不了解子查询是无用的,才会发生这种情况。一天升级到MySQL
7.5版后,您的原始查询可以正常运行,并且查询像以前一样停止工作。(因为优化器变得更聪明,并且无需子选择即可将查询翻译成更简单的查询)。
如果MySQL在将来的版本中决定使用符合SQL标准的
GROUPBY查询,您甚至可能会发现查询完全停止工作并产生错误。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)