Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 具有多个条件的select中的SQL排序行_Mysql_Sql_Select - Fatal编程技术网

Mysql 具有多个条件的select中的SQL排序行

Mysql 具有多个条件的select中的SQL排序行,mysql,sql,select,Mysql,Sql,Select,我试图创建一个SQL查询,从数据库中选择按数字字段排序的行,但是表中有重复的条目。 该表由以下列组成 UID-数字唯一ID 账户名称-账户名称,未更改 NICK\u NAME-用户可以随时更改 积分-记录用户帐户持有的积分 查询的目的是显示按点数排序的帐户名称。但是,帐户名称不是唯一的,可以在表中多次出现。 为了解决这个问题,我只想显示每个帐户名的最新一行。 这意味着在“选择每个帐户”的结果中,名称只应出现一次。我试图让UID决定选择,这意味着我只希望显示每个帐户名所在的UID最大的行 我尝试了

我试图创建一个SQL查询,从数据库中选择按数字字段排序的行,但是表中有重复的条目。 该表由以下列组成

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;