MySQL-显示每个组的最新记录的不同结果
我试图找出最有效的方法来检索每个组的最新记录 我设法生成两个不同的查询。但细节略有不同 这些是gcm_通知记录。 有更多的记录存在。但现在我只想关注一张唱片。从图中,我们可以看到最新的id=1393,标志=1 现在,我尝试使用两个不同的查询来检索每个组的最新记录 备选案文1: 备选案文2: 如您所见,选项2显示正确的结果 这是我的问题,, 为什么选项1显示正确的id,但标志值错误?是否因为MAX只更新当前id而不更新标志MySQL-显示每个组的最新记录的不同结果,mysql,Mysql,我试图找出最有效的方法来检索每个组的最新记录 我设法生成两个不同的查询。但细节略有不同 这些是gcm_通知记录。 有更多的记录存在。但现在我只想关注一张唱片。从图中,我们可以看到最新的id=1393,标志=1 现在,我尝试使用两个不同的查询来检索每个组的最新记录 备选案文1: 备选案文2: 如您所见,选项2显示正确的结果 这是我的问题,, 为什么选项1显示正确的id,但标志值错误?是否因为MAX只更新当前id而不更新标志 -很抱歉,如果SQL查询太混乱且难以阅读,因为我不知道如何突出显示语法-
-很抱歉,如果SQL查询太混乱且难以阅读,因为我不知道如何突出显示语法- 选择的未聚合列是不确定的,这就是第一个查询不正确的原因 MySQL手册:
如果仅禁用了_FULL _GROUP _BY,则GROUP BY标准SQL使用的MySQL扩展允许select list、HAVING condition或ORDER BY list引用未聚合的列,即使这些列在功能上不依赖于GROUP BY列。这导致MySQL接受前面的查询。在这种情况下,服务器可以从每个组中自由选择任何值,因此,除非它们相同,否则选择的值是不确定的,这可能不是您想要的。此外,添加ORDERBY子句不会影响从每个组中选择值。结果集排序发生在选择值之后,排序依据不影响服务器在每个组中选择的值。如果您知道,由于数据的某些属性,每个未在GROUP BY中命名的非聚集列中的所有值对于每个组都是相同的,则仅禁用“完整”GROUP BY非常有用。这就是我要寻找的解释!谢谢你的介绍。
SELECT id, post_id, registration_id, flag
FROM gcm_notification
WHERE post_id = 1743
AND registration_id = "ezDCef_3ORo:APA91bG-sSjaMR9OwylrV7A0H7dvTEAfwJNYGUa3Ud5QZhNIh7-r2peLrb9H33pUs_KJkYisnsIUL4bUT1xrqffOv2jYXBB348oNgNVmLHGZrmgLFdWQiSVRfq9A8BhAGoBB0xN-aDs-"
SELECT MAX(id) as latest_id, post_id, flag
FROM gcm_notification
WHERE registration_id = "ezDCef_3ORo:APA91bG-sSjaMR9OwylrV7A0H7dvTEAfwJNYGUa3Ud5QZhNIh7-r2peLrb9H33pUs_KJkYisnsIUL4bUT1xrqffOv2jYXBB348oNgNVmLHGZrmgLFdWQiSVRfq9A8BhAGoBB0xN-aDs-"
GROUP BY post_id
SELECT id, post_id, flag
FROM gcm_notification t1
RIGHT JOIN (
SELECT MAX(id) AS latest
FROM wp_spc_gcm_notification
WHERE registration_id = "ezDCef_3ORo:APA91bG-sSjaMR9OwylrV7A0H7dvTEAfwJNYGUa3Ud5QZhNIh7-r2peLrb9H33pUs_KJkYisnsIUL4bUT1xrqffOv2jYXBB348oNgNVmLHGZrmgLFdWQiSVRfq9A8BhAGoBB0xN-aDs-"
GROUP BY post_id) t2
ON t1.id = t2.latest
WHERE registration_id = "ezDCef_3ORo:APA91bG-sSjaMR9OwylrV7A0H7dvTEAfwJNYGUa3Ud5QZhNIh7-r2peLrb9H33pUs_KJkYisnsIUL4bUT1xrqffOv2jYXBB348oNgNVmLHGZrmgLFdWQiSVRfq9A8BhAGoBB0xN-aDs-"
GROUP BY post_id