问题陈述
考虑以下玩家表现表:
<code class="language-sql">CREATE TABLE TopTen ( id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, home INT UNSIGNED NOT NULL, `datetime` DATETIME NOT NULL, player VARCHAR(6) NOT NULL, resource INT NOT NULL );</code>
目标是检索每个不同的home列的行,同时考虑每个home的datetime列的最大值。此外,结果中应包含其他列(player等)。
示例数据
<code class="language-sql">INSERT INTO TopTen (id, home, `datetime`, player, resource) VALUES (1, 10, '2009-04-03', 'john', 399), (2, 11, '2009-04-03', 'juliet', 244), (5, 12, '2009-04-03', 'borat', 555), (3, 10, '2009-03-03', 'john', 300), (4, 11, '2009-03-03', 'juliet', 200), (6, 12, '2009-03-03', 'borat', 500), (7, 13, '2008-12-24', 'borat', 600), (8, 13, '2009-01-01', 'borat', 700) ;</code>
预期结果
<code>id home datetime player resource 1 10 2009-04-03 john 399 2 11 2009-04-03 juliet 244 5 12 2009-04-03 borat 555 8 13 2009-01-01 borat 700</code>
解决方案
以下查询提供所需结果:
<code class="language-sql">SELECT tt.* FROM topten tt INNER JOIN (SELECT home, MAX(datetime) AS MaxDateTime FROM topten GROUP BY home) groupedtt ON tt.home = groupedtt.home AND tt.datetime = groupedtt.MaxDateTime;</code>
此查询执行以下步骤:
注意:我修正了日期格式,使其符合标准的YYYY-MM-DD
格式,以确保MySQL能够正确解析。 这不会改变查询的逻辑,只会保证数据的正确性。
以上是如何在MySQL中为每个Home选择具有最大日期时间的行?的详细内容。更多信息请关注PHP中文网其他相关文章!