2011-11-18 29 views
0

我需要一個查詢來選擇某個列作用域的最後一行。如何在MySQL中選擇某個列作用域的所有最後一行

例如,整個表:通過查詢返回

---------------------- 
| ID | NAME | FOO_ID | 
|--------------------| 
| 1 | jQue | 2 | 
| 2 | Prot | 2 | 
| 3 | Node | 2 | 
| 4 | Moo | 1 | 
| 5 | Scri | 1 | 
---------------------- 

行,返回所有的「最後一排」在FOO_ID列範圍:

---------------------- 
| ID | NAME | FOO_ID | 
|--------------------| 
| 3 | Node | 2 | 
| 5 | Scri | 1 | 
---------------------- 

有人可以幫助我在如何代碼這個查詢?

+1

但去年FOO_ID是節點,而不是PROT –

+0

特殊照顧肯定的是,THX。 :) –

+0

你如何定義'最後'行?你是否通過ID訂購?您是否正在尋找插入到表 – meouw

回答

1

我會用這些無論你覺得最清楚:

  • a1ex07的查詢

SELECT * 
    FROM the_table 
WHERE id IN 
     (SELECT MAX(id) 
      FROM the_table 
      GROUP 
       BY foo_id 
     ) 
; 

SELECT * 
    FROM the_table a 
WHERE NOT EXISTS 
     (SELECT 1 
      FROM the_table b 
      WHERE b.foo_id = a.foo_id 
      AND b.id > a.id 
     ) 
; 

SELECT a.* 
    FROM the_table a 
    LEFT 
OUTER 
    JOIN the_table b 
    ON b.foo_id = a.foo_id 
    AND b.id > a.id 
WHERE b.id IS NULL 
; 

(我自己的偏好是IN的版本,但你可能會覺得有所不同。)

+0

同意。你用'IN'的第一個例子工作正常。 –

2
SELECT a.* 
FROM table_1 a 
INNER JOIN (SELECT foo_id, max(id) as max_id FROM table_1 GROUP BY foo_id)b 
ON b.max_id = a.id 
相關問題