我有一个表,每个“website_id”都有多行
CREATE TABLE `MyTable` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`tagCheckResult` int(11) DEFAULT NULL,
`website_id` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `IX_website_id` (`website_id`),
) ENGINE=InnoDB;
我正在尝试选择每个 website_id 的最新条目
-- This creates a temporary table with the last entry per website_id, and joins it
-- to get the entire row
SELECT *
FROM `WebsiteStatus` ws1
JOIN (
SELECT MAX(id) max_id, website_id FROM `WebsiteStatus`
GROUP BY website_id) ws2
ON ws1.id = ws2.max_id
现在,我知道获取每个 website_id 最后一行的正确方法如上所述。我的问题是 - 我还尝试了以下更简单的查询,它似乎返回与上面完全相同的结果:
SELECT * FROM `WebsiteStatus`
GROUP BY website_id
ORDER BY website_id DESC
我知道原则上GROUP BY
没有运算符(例如MAX
),就像我在第二个查询中所做的那样,可以返回任何相关行......但实际上它返回最后一个。mysql中是否有一个实现细节可以保证总是如此?
(只是出于学术好奇心,我知道第一个查询“更正确”)。