0

我有一张如下表

id name tid seq aname ds
1  a     xy  10  G     E
1  a     xz  20  G     E
1  a     az  30  G     E
1  b     wq  10  G     E
1  b     as  20  G     E
2  c     qw  10  G     E
2  c     sd  20  G     E  
1  a     fg  34  S     F

现在我想要o/p如下

id name tid seq  
1  a    az  30

1  b    as  20       
2  c    sd  20

我的查询如下

select id,name,tid,max(seq) 
from table 
group by id,name where aname='G' and ds='E'; 

但是我在 tid 字段中得到空值。我哪里出错了?请帮助。谢谢

4

1 回答 1

0

这样做的一种方法是使用一个子查询,该子查询seq为每组ID和获取最大值Name。然后,子查询的结果将连接回表本身,前提是它在三列上匹配:IDNameseq, 为您提供正确的 值tid

SELECT  a.*
FROM    tableName a
        INNER JOIN
        (
            SELECT  id, name, max(seq) max_seq
            FROM    tableName
            GROUP   BY ID,name 
        ) b ON a.ID = b.ID AND
                a.seq = b.max_seq AND
                a.name = b.name

输出

╔════╦══════╦═════╦═════╗
║ ID ║ NAME ║ TID ║ SEQ ║
╠════╬══════╬═════╬═════╣
║  1 ║ a    ║ az  ║  30 ║
║  1 ║ b    ║ as  ║  20 ║
║  2 ║ c    ║ sd  ║  20 ║
╚════╩══════╩═════╩═════╝
于 2013-03-20T09:22:22.457 回答