Mysql 具有多个条件的select中的SQL排序行
我试图创建一个SQL查询,从数据库中选择按数字字段排序的行,但是表中有重复的条目。 该表由以下列组成Mysql 具有多个条件的select中的SQL排序行,mysql,sql,select,Mysql,Sql,Select,我试图创建一个SQL查询,从数据库中选择按数字字段排序的行,但是表中有重复的条目。 该表由以下列组成 UID-数字唯一ID 账户名称-账户名称,未更改 NICK\u NAME-用户可以随时更改 积分-记录用户帐户持有的积分 查询的目的是显示按点数排序的帐户名称。但是,帐户名称不是唯一的,可以在表中多次出现。 为了解决这个问题,我只想显示每个帐户名的最新一行。 这意味着在“选择每个帐户”的结果中,名称只应出现一次。我试图让UID决定选择,这意味着我只希望显示每个帐户名所在的UID最大的行 我尝试了
UID
-数字唯一ID
账户名称
-账户名称,未更改
NICK\u NAME
-用户可以随时更改
积分
-记录用户帐户持有的积分
查询的目的是显示按点数排序的帐户名称。但是,帐户名称不是唯一的,可以在表中多次出现。
为了解决这个问题,我只想显示每个帐户名的最新一行。
这意味着在“选择每个帐户”的结果中,名称只应出现一次。我试图让UID决定选择,这意味着我只希望显示每个帐户名所在的UID最大的行
我尝试了以下方法,但没有达到预期效果。(表名为科目
)
这并没有给我期望的结果,特别是,数据库中有一个帐户,其中存在一个过时的行,在Points
列中具有较高的值。此记录显示为选择中的第一个结果,即使它已过时
您建议如何调整此查询以选择所需信息
我希望这是足够的信息(第一次发布问题)谢谢你的帮助:)
编辑:添加带有数据的示例
样本表数据:
目前的结果:
预期结果:
考虑加入聚合查询,计算
MAX(UID)
另一方面,用MySQL 8,考虑A:
考虑加入一个聚合查询,计算
MAX(UID)
另一方面,用MySQL 8,考虑A:
样本数据和期望的结果真的会有帮助。当然,我会很快用例子更新。是什么让记录“过时”?您可能希望在WHERE子句中添加一个“and”条件,以过滤掉过期记录。如果表中有另一条记录具有相同的
帐户名
,但更大的UID
示例数据和所需结果,则该记录已过期。当然,我将很快用示例进行更新。是什么使记录“过期”呢? 您可能希望在WHERE子句中添加一个“and”条件,以筛选出过期记录。如果表中有另一条记录具有相同的帐户名称,但具有更大的UID
SELECT DISTINCT A.account_name , A.uid, A.points
FROM account A, account B
where A.account_name = B.account_name
and A.points > 0
and A.uid >= B.uid
order by A.points DESC;
SELECT a.account_name, a.uid, a.points
FROM account a
INNER JOIN
(
SELECT account_name, MAX(uid) AS max_uid
FROM account
GROUP BY account_name
) agg
ON a.account_name = agg.account_name
AND a.uid = agg.max_uid)
WHERE a.points > 0
ORDER by a.points DESC;
SELECT a.account_name, a.uid, a.points
FROM account a
WHERE a.points > 0
AND a.uid = MAX(a.uid) OVER (PARTITION BY a.account_name)
ORDER by a.points DESC;