0

我有一个表,每个“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中是否有一个实现细节可以保证总是如此?

(只是出于学术好奇心,我知道第一个查询“更正确”)。

4

0 回答 0