2013-03-20 97 views
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'; 

但iam在tid字段中獲得空值。我在哪裏出錯了?請幫助。謝謝

+0

抱歉地說,但如果是在你的表的主鍵? – 2013-03-20 09:29:11

+0

tid,seq是關鍵 – user2037445 2013-03-20 09:38:58

回答

0

這樣做的一種方法是使用子查詢,該查詢對於每組IDName獲得最大值seq。然後將子查詢的結果重新連接到表格本身,只要它匹配三列:ID,Nameseq,即可爲您提供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 ║ 
╚════╩══════╩═════╩═════╝ 
+0

看到我更新的答案':)' – 2013-03-20 09:29:46

+0

明白了!!! !!!非常感謝:)但有些行丟失:( – user2037445 2013-03-20 09:40:14

+0

什麼額外的行? – 2013-03-20 09:41:57