我有一个具有这种结构的表:
id int
min int
max int
我想以高级排序并选择第一行的最大值和第二行的最小值。
所以我做了这个查询,然后才得到我需要的值:
select min, max
from mytable
order by min asc
limit 2;
我也尝试过这个:
select cm_max
from mytable
order by cm_min
limit 1
union
select cm_min
from mytable
order by cm_min
limit 1,1;
但是不起作用...... 有没有办法只选择我将使用的字段?
答案 0 :(得分:1)
如果您希望在一行中返回值,则可以执行
SELECT MIN(CASE WHEN rnum = 1 THEN cm_max END) cm_max,
MIN(CASE WHEN rnum = 2 THEN cm_min END) cm_min
FROM
(
SELECT id, cm_min, cm_max, @n := @n + 1 rnum
FROM medidas, (SELECT @n := 0) n
ORDER BY cm_min
LIMIT 2
) q
它的作用是获取两条带有订单条件的记录,并为内部选择中的每一行分配一个行号。然后在外部选择中,我们使用CASE
和行号来转动其值。
或
SELECT q1.cm_max, q2.cm_min
FROM
(
SELECT id, cm_min, cm_max
FROM medidas
ORDER BY cm_min
LIMIT 1
) q1 CROSS JOIN
(
SELECT id, cm_min, cm_max
FROM medidas
ORDER BY cm_min
LIMIT 1, 1
) q2
在此查询中,我们抓取两个对子查询感兴趣的记录,并使用CROSS JOIN
连接两个记录并输出所需的值。
以下是两个查询的 SQLFiddle 演示
答案 1 :(得分:0)
将您的限制更改为1,1以仅从该集合中选择第二条记录:
select cm_max as 'value'
from medidas
order by cm_min
limit 1
union
select cm_min as 'value'
from medidas
order by cm_min
limit 1,1;
不确定MySQL是否会抱怨字段名称不匹配,因此可能需要也可能不需要别名。