Mysql 选择一行而不是另一行,但不基于where子句

Mysql 选择一行而不是另一行,但不基于where子句,mysql,Mysql,我不太清楚如何恰当地问这个问题,这可能是我的问题的一部分。存在一个数据库,其中有许多类似的记录,它们由一个名为“优先级”的列来区分。我想获取具有较高优先级的记录,该记录具有相同的“类型”和“项目”id。例如,该表如下所示: id project_id type_id priority 1 66 14 0 2 66 14 10 3 66 16 0 目前,程序通过项目和类型选择: Select *

我不太清楚如何恰当地问这个问题,这可能是我的问题的一部分。存在一个数据库,其中有许多类似的记录,它们由一个名为“优先级”的列来区分。我想获取具有较高优先级的记录,该记录具有相同的“类型”和“项目”id。例如,该表如下所示:

id  project_id type_id  priority 
1   66          14      0
2   66          14      10
3   66          16      0
目前,程序通过项目和类型选择:

Select * FROM table WHERE project_id = 66;
然后,当存在多个相同
类型\u id
的记录时,它循环遍历结果并丢弃优先级较低的记录。有没有办法通过select(选择)按钮执行此操作

理想的结果集是:

id  project_id type_id  priority 
2   66          14      10
3   66          16      0

其中它丢弃了较低优先级的type_id 14记录。表中可能有两个以上具有相同类型id的项目。

唯一难以获取的字段是
id
。而且,您可以使用
group\u concat()
技巧来实现这一点

Select * FROM table GROUP BY project_id, type_id ORDER BY priority DESC
select project_id, type_id, max(priority) as priority,
       substring_index(group_concat(id order by priority desc), ',', 1) as id
from t
group by project_id, type_id;

这将确保您获得最大优先级的id,并且对于每个
项目\u id
/
类型\u id
组合,您只能获得一个这样的行。

如果多个行的优先级等于最大优先级,这将返回所有行。我现在感觉很懒,所以只有在你要求的情况下,我才会尝试摆脱这些“重复品”。)
select project_id, type_id, max(priority) as priority,
       substring_index(group_concat(id order by priority desc), ',', 1) as id
from t
group by project_id, type_id;