gpt4 book ai didi

MySQL - 不同结果显示每组最新记录

转载 作者:行者123 更新时间:2023-11-28 23:34:35 25 4
gpt4 key购买 nike

我正在尝试找出最有效的方法来检索每个组的最新记录。

我设法生成两个不同的查询。但细节略有不同。

这些是 gcm_notification 记录。还有更多的记录存在。但现在我只想专注于一张唱片。从图像中,我们可以看到带有 flag = 1

latest id = 1393
SELECT id, post_id, registration_id, flag
FROM gcm_notification
WHERE post_id = 1743
AND registration_id = "ezDCef_3ORo:APA91bG-sSjaMR9OwylrV7A0H7dvTEAfwJNYGUa3Ud5QZhNIh7-r2peLrb9H33pUs_KJkYisnsIUL4bUT1xrqffOv2jYXBB348oNgNVmLHGZrmgLFdWQiSVRfq9A8BhAGoBB0xN-aDs-"

enter image description here

现在我正在尝试使用 2 个不同的查询来检索每个组的最新记录。

选项 1:

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

enter image description here

选项 2:

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

enter image description here

如您所见,选项 2 显示了正确的结果。

这是我的问题,
为什么选项1显示正确的idflag值是错误的?是因为 MAX 只更新了当前的 id 而没有更新 flag 吗?

-- 抱歉,如果 SQL 查询太乱且难以阅读,因为我不知道如何突出显示语法。 --

最佳答案

非聚合列的选择是不确定的,这就是第一个查询不正确的原因。

MySQL 手册:

http://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

如果禁用 ONLY_FULL_GROUP_BY,MySQL 对 GROUP BY 的标准 SQL 使用的扩展允许选择列表、HAVING 条件或 ORDER BY 列表引用非聚合列,即使这些列在功能上不依赖于 GROUP BY 列。这会导致 MySQL 接受前面的查询。 在这种情况下,服务器可以自由地从每个组中选择任何值,因此除非它们相同,否则所选的值是不确定的,这可能不是您想要的。 此外,添加 ORDER BY 子句不会影响从每个组中选择值。结果集排序发生在选择值之后,并且 ORDER BY 不影响服务器选择每个组中的哪个值。禁用 ONLY_FULL_GROUP_BY 主要是因为您知道,由于数据的某些属性,每个未在 GROUP BY 中命名的非聚合列中的所有值对于每个组都是相同的。

关于MySQL - 不同结果显示每组最新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36169649/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com