从MAX(ID),MIN(ID)MYSQL查询获取更多信息?

时间:2012-07-31 17:07:19

标签: mysql max min

如何从MAX(ID), MIN(ID) MYSQL查询中获取更多列?

目前我只从这个查询中获得两个值:MAX(ID) & MIN(ID)

SELECT MIN(ID), MAX(ID) FROM mytable WHERE mytable.series = 'white' ;

需要得到类似这样的伪查询:

SELECT  column1, column2
FROM    mytable 
WHERE   series = 'white'
AND ID=Max(ID)
'AND GET ME ALSO'
WHERE   series = 'white'
AND ID=Min(ID);`

它应该为“系列”列返回2行,等于“白色”。

第1列,第1列,第2列,ID =最小值(ID)。 第2列,第1列,第2列,ID =最大值(ID)。

但是怎么样?

3 个答案:

答案 0 :(得分:6)

以下是使用UNION的方法:

SELECT column1, column2
FROM mytable
WHERE series = 'white' AND ID IN
(    
    SELECT MIN(ID) FROM mytable WHERE series = 'white'
    UNION
    SELECT MAX(ID) FROM mytable WHERE series = 'white'
)

为了获得良好的效果,请在(series, id)上添加综合索引。

或其他可能具有更好性能的变体:

(
    SELECT column1, column2
    FROM mytable
    WHERE series = 'white'
    ORDER BY ID
    LIMIT 1
)
UNION
(
    SELECT column1, column2
    FROM mytable
    WHERE series = 'white'
    ORDER BY ID DESC
    LIMIT 1
)

这也可以使用(series, id)上的组合索引。

答案 1 :(得分:2)

更简单的解决方案:

SELECT a.column1, a.column2
FROM   mytable a
JOIN   (
       SELECT MIN(ID) AS minid, MAX(ID) AS maxid
       FROM   mytable
       WHERE  series = 'white'
       ) b ON a.ID IN (b.minid, b.maxid)

答案 2 :(得分:0)

正如你所说的那样:

SELECT
  column1, column2
FROM 
  mytable as m, 
  (SELECT MIN(ID) as mid, MAX(ID) as xid 
   FROM mytable WHERE mytable.series = 'white'
   ) t
WHERE 
  m.ID = t.mid or m.ID = t.xid;

括号中的select是内部选择,您可以像使用另一个表一样使用。