gpt4 book ai didi

mysql - 如果值在组中最高,则将列更新为 1,否则更新为 0

转载 作者:行者123 更新时间:2023-11-29 12:24:48 24 4
gpt4 key购买 nike

我有一个包含以下列的表格:

player_id, datetime, player_level, is_latest

我需要做的是,当datetime对于玩家来说是最高的时,设置is_latest = 1

这就是我检查玩家最高日期时间的方法:

SELECT player_id, MAX(datetime)
FROM players
GROUP BY player_id

现在我需要更新整个表:

UPDATE players
SET is_latest = /* 1 if datetime = MAX(datetime), 0 otherwise */

您对如何编写 UPDATE 语句有什么想法吗?如果我可以在单个 SQL 查询中使用 SELECTUPDATE ,那就最好了。

该表有 3000 万行,因此我想要一个不涉及将所有行复制到其他地方的解决方案。

最佳答案

我不知道这是否是最快的方法,但这个查询应该做你想做的事情,并让你了解一般语法:

UPDATE players p
LEFT JOIN (
SELECT player_id, MAX(datetime) max_date
FROM players
GROUP BY player_id
) t ON p.player_id = t.player_id AND p.datetime = t.max_date
SET p.is_latest = (t.max_date IS NOT NULL);

使用左连接意味着与p.datetime = t.max_date谓词不匹配的行将为null,事实上,我们可以在 set 子句中使用 bool 表达式来确保只有最新的行将被设置为 1,而较旧的行将被设置为 0。

查看此SQL Fiddle举个例子。

一如既往,当涉及到测试更新等时,请确保有一个副本/备份...

关于mysql - 如果值在组中最高,则将列更新为 1,否则更新为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28480740/

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