「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
原則として、2番目のクエリで行うように、演算子なしで(たとえば、)関連する行を返すことができることを知っていMAX
ます...しかし、実際には最後の行を返します。これが常に当てはまることを保証する mysql の実装の詳細はありますか?
(学術的な好奇心を求めているだけですが、最初のクエリが「より正しい」ことはわかっています)。