gpt4 book ai didi

mysql - 如何在 MYSQL 中通过另一列选择具有 MAX(列值)、PARTITION 的行?

转载 作者:行者123 更新时间:2023-11-29 15:55:34 25 4
gpt4 key购买 nike

我有一张球员表现表:

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
);

什么查询将返回每个不同的行 home保持最大值 datetime ?换句话说,我如何按最大 datetime 进行过滤(按 home 分组)并在结果中仍然包含其他非分组、非聚合列(例如 player )?

对于此示例数据:

INSERT INTO TopTen
(id, home, `datetime`, player, resource)
VALUES
(1, 10, '04/03/2009', 'john', 399),
(2, 11, '04/03/2009', 'juliet', 244),
(5, 12, '04/03/2009', 'borat', 555),
(3, 10, '03/03/2009', 'john', 300),
(4, 11, '03/03/2009', 'juliet', 200),
(6, 12, '03/03/2009', 'borat', 500),
(7, 13, '24/12/2008', 'borat', 600),
(8, 13, '01/01/2009', 'borat', 700)
;

结果应该是:

<表类=“s-表”><标题>id首页日期时间玩家资源 <正文>1102009年4月3日约翰3992112009年4月3日朱丽叶2445122009年4月3日波拉特5558132009年1月1日波拉特700

我尝试使用子查询获取最大值 datetime对于每个 home :

-- 1 ..by the MySQL manual: 

SELECT DISTINCT
home,
id,
datetime AS dt,
player,
resource
FROM TopTen t1
WHERE `datetime` = (SELECT
MAX(t2.datetime)
FROM TopTen t2
GROUP BY home)
GROUP BY `datetime`
ORDER BY `datetime` DESC

尽管数据库保存了 187 行,但结果集有 130 行,这表明结果包含 home 的一些重复项.

然后我尝试加入一个获得最大值 datetime 的子查询。每行 id :

-- 2 ..join

SELECT
s1.id,
s1.home,
s1.datetime,
s1.player,
s1.resource
FROM TopTen s1
JOIN (SELECT
id,
MAX(`datetime`) AS dt
FROM TopTen
GROUP BY id) AS s2
ON s1.id = s2.id
ORDER BY `datetime`

不。给出所有记录。

我尝试了各种奇异的查询,每个查询都有不同的结果,但没有任何结果能让我更接近解决这个问题。

最佳答案

你离得太近了!您需要做的就是选择家庭及其最大日期时间,然后在两个字段上连接回 topten 表:

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

关于mysql - 如何在 MYSQL 中通过另一列选择具有 MAX(列值)、PARTITION 的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56497529/

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