SQL选择与条件不同

时间:2009-11-23 16:25:17

标签: sql mysql

表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语句来执行此操作?

5 个答案:

答案 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>

如果您的表格为InnoDBidPRIMARY 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