我需要查询以选择某些列范围的最后一行。

例子,整个表:

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


有人可以帮我编码该查询吗?

最佳答案

我会用其中最清楚的一种:


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的版本,但是您可能会有所不同。)

关于mysql - 如何在MySQL中选择某一列范围的所有最后一行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8190398/

10-10 05:20