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

标签 mysql sql max distinct greatest-n-per-group

我有一张球员表现表:

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 首页 日期时间 玩家 资源 <正文> 1 10 2009年4月3日 约翰 399 2 11 2009年4月3日 朱丽叶 244 5 12 2009年4月3日 波拉特 555 8 13 2009年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/40720833/

相关文章:

sql - 表名有空格的优缺点

mysql - 仅返回最大值大于指定值的行

python - numpy max vs amax vs 最大值

php - Yii/Bootstrap OnClick 执行 MySQL 查询

mysql - Knowage 自动生成的查询理解

mysql - 高级 MySQL 模式匹配(超越 LIKE...%)

mysql - 根据最后一个条目获取列值(非空)

javascript - 如何使用PHP从mysql中查询图像

mysql - 将 monad 组合翻译成 SQL

sql - 如何在 iSeries 上的 SQL400 中获取 UTC 时间戳?