不太确定如何正确地问这个问题,这可能是我问题的一部分。存在一个具有许多类似记录的数据库,这些记录由名为' priority'的列区分。我想抓住具有更高优先级的记录,该记录具有相同的'类型' &安培; '项目' 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;
然后,当存在多个相同type_id
的记录时,它会遍历结果并丢弃优先级较低的记录。有没有办法通过选择来做到这一点?
理想的结果集是:
id project_id type_id priority
2 66 14 10
3 66 16 0
它丢弃了优先级较低的type_id 14记录。表中可能有超过2个具有相同type_id的项目。
答案 0 :(得分:0)
Select * FROM table GROUP BY project_id, type_id ORDER BY priority DESC
答案 1 :(得分:0)
SELECT *
FROM table
JOIN (
SELECT project_id, type_id, MAX(priority) AS max_priority
FROM table
GROUP BY project_id, type_id
) AS maxima -- subquery returns one row per group (project_id, type_id) along with the highest priority in each group
-- join this with the main table
ON maxima.project_id = table.project_id
AND maxima.type_id = table.type_id
AND maxima.max_priority = table.priority
答案 2 :(得分:0)
唯一难以获得的字段是id
。并且,您可以使用group_concat()
技巧来实现这一目标。
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,并且每个project_id
/ type_id
组合只能获得一行。