表1有列(id,a,b,c,group)。有几个行具有相同的组,但id始终是唯一的。我想SELECT组,a,b FROM Table1 WHERE组是不同的。但是,我希望返回的数据来自该组具有最大id的行。
因此,如果我们有行
(id=10, a=6, b=40, c=3, group=14)
(id=5, a=21, b=45, c=31, group=230)
(id=4, a=42, b=65, c=2, group=230)
我想返回这两行:
[group=14, a=6,b=40] and
[group=230, a=21,b=45] (because id=5 > id=4)
是否有一个简单的SELECT语句来执行此操作?
答案 0 :(得分:3)
尝试:
select grp, a, b
from table1 where id in
(select max(id) from table1 group by grp)
答案 1 :(得分:1)
您可以使用自联接或内部选择来执行此操作。这是内在的选择:
select `group`, a, b from Table1 AS T1
where id=(select max(id) from Table1 AS T2 where T1.`group` = T2.`group`)
自我加入方式:
select T1.`group`, T2.a, T2.b from
(select max(id) as id,`group` from Table1 group by `group`) T1
join Table1 as T2 on T1.id=T2.id
答案 2 :(得分:1)
2选择,你的内部选择得到:
SELECT MAX(id) FROM YourTable GROUP BY [GROUP]
您的外部选择加入此表。
从逻辑上考虑,内部选择获取所需数据的子集。 外部select内部连接到该子集,可以获得更多数据。
SELECT [group], a, b FROM YourTable INNER JOIN
(SELECT MAX(id) FROM YourTable GROUP BY [GROUP]) t
ON t.id = YourTable.id
答案 3 :(得分:1)
SELECT mi.*
FROM (
SELECT DISTINCT grouper
FROM mytable
) md
JOIN mytable mi
ON mi.id =
(
SELECT id
FROM mytable mo
WHERE mo.grouper = md.grouper
ORDER BY
id DESC
LIMIT 1
)
如果您的表格为MyISAM
或 id
不是PRIMARY KEY
,请确保您在(grouper, id)
上有一个综合索引。< / p>
如果您的表格为InnoDB
且id
为PRIMARY KEY
,那么grouper
上的简单索引就足够了(id
,即PRIMARY KEY
将被隐含地包括在内。)
这将使用INDEX FOR GROUP-BY
来构建不同的石斑鱼列表,对于每个石斑鱼,它将使用索引访问来查找最大值id
。
答案 4 :(得分:0)
不知道如何在mysql中做到这一点。但是下面的代码适用于MsSQL ......
SELECT Y.* FROM ( SELECT DISTINCT [group], MAX(id) ID FROM Table1 GROUP BY [group] ) X INNER JOIN Table1 Y ON X.ID=Table1.ID