2014-07-12 70 views
0

拜託,我想從兩個表的最大值來查詢數據,選擇一行的最大值兩個表

table1 
|user_id | name | 
| 001 | Paul | 
| 002 | Sean | 


table2 
|id | class | Year | user_id | 
|201 | 1A | 2010 | 001 | 
|202 | 2A | 2011 | 001 | 
|203 | 1B | 2010 | 002 | 

user_idtable2引用user_idtable1

這是怎麼了我希望我的輸出是

OUTPUT 
| user_id | name | class| year | 
| 001  | Paul | 2A | 2011 | 
| 002  | Sean | 1B | 2010 | 

受審到目前爲止

SELECT 
     a.user_id, 
     a.name, 
     b.class, 
     max(Year) as year 
FROM 
     table1 a 
INNER JOIN 
      table2 b 
    ON 
      a.user_id=b.user_id 

GROUP BY user_id 

上面這個查詢給了我最大的一年,在一排不同的類值,因此先前的類值。這是它看起來像

| user_id | name | class| year | 
| 001  | Paul | 1A | 2011 | 
| 002  | Sean | 1B | 2010 | 

請問我在哪裏我的錯誤在我的查詢?任何幫助表示讚賞。由於

回答

1

也許你可以訂購完整結果在今年第一組,然後組:

SELECT * FROM (

SELECT 
     a.user_id, 
     a.name, 
     b.class, 
     year 
FROM 
     table1 a 
INNER JOIN 
      table2 b 
    ON 
      a.user_id=b.user_id 
ORDER BY year desc 

) h 
GROUP BY user_id 

SqlFiddle demo here

+0

這工作,謝謝你的努力 – George

+0

你好,@lpg,我對這個答案做了一個後續問題。你可以請幫忙..http://stackoverflow.com/q/24737959/2595059謝謝 – George

0

由於您使用group by已經,您可以使用substring_index()/group_concat()黑客:

SELECT a.user_id, a.name, 
     substring_index(group_concat(b.class order by year desc), ',', 1) as maxclass 
     max(Year) as year 
FROM table1 a INNER JOIN 
    table2 b 
    ON a.user_id=b.user_id 
GROUP BY a.user_id, a.name; 

你也可以做到這一點沒有一個group by,使用not exists

SELECT a.user_id, a.name, b.class, b.year 
FROM table1 a INNER JOIN 
    table2 b 
    ON a.user_id=b.user_id 
WHERE NOT EXISTS (select 1 from table2 b2 where b2.user_id = b.user_id and b2.year > b.year) 

where條款改寫查詢。它說:「從table2獲取所有行,其中相同的用戶沒有更大的year。」這相當於獲得最大年份的行。而且,這是標準的SQL,通常在任何數據庫中都能很好地工作。

+0

感謝你的努力 – George

0

通過用戶ID嘗試使用子查詢

 
SELECT 
     a.user_id, 
     a.name, 
     (Select class FROM table2 where year = max(b.year)) as class, 
     max(b.Year) as year 
FROM 
     table1 a,table2 b 
WHERE 
     a.user_id=b.user_id