gpt4 book ai didi

mysql - 比较两个表中的分数并显示最近不同的分数

转载 作者:行者123 更新时间:2023-11-29 02:40:34 27 4
gpt4 key购买 nike

我在 MariaDB 中有两个表,我需要在左表中显示当前分数与历史表中最新分数不同的那些表。

例如:

users

id name current_score
1 Bob 4
2 Tom 5
3 Fred 3
4 Tim 3
5 Ian 4


histories
id user_id score date
1 1 3 2018-11-13
2 1 4 2018-11-12
3 1 2 2018-11-11
4 2 5 2018-11-12

在上面,我想显示 Bob,因为他的最新历史记录与他当前的分数不同,但不显示 Tom,因为他是一场比赛

我尝试使用类似的东西:

SELECT u.id, u.name, u.current_score 
FROM users u
where u.current_score not in
(select h.score from histories h where
h.user_id=u.id order by h.date desc limit 1)

这引发了一个错误:

#1235 - This version of MariaDB doesn't yet support 
'LIMIT & IN/ALL/ANY/SOME subquery'

如果我删除限制 1,那么它会返回用户中几乎所有的行 - 每个表中有几千行,但我认为它应该返回大约 50 行,但它返回了 4,285 行中的 4,100 多行

最佳答案

  • Select 子句本身内确定相关子查询中的最新历史分数。
  • Group By 对用户,并使用HAVING 子句来考虑当前分数与历史上最新分数不匹配的情况
  • 我必须对分值使用 MAX() 聚合函数,以便它是一个有效的 ANSI SQL 兼容 GROUP BY。它不会影响任何事情,因为各自的分数值仅为一个(因此仅为最大值)。

请尝试以下操作:

SELECT u.id, 
u.name,
MAX(u.current_score) AS m_current_score,
MAX((select h.score
from histories h
where h.user_id = u.id
order by h.date desc limit 1)) AS history_score
FROM users u
GROUP BY u.id, u.name
HAVING m_current_score <> history_score

关于mysql - 比较两个表中的分数并显示最近不同的分数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53289384/

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