基于一列访问两行,但也访问这些行的其他列

时间:2018-06-12 03:55:50

标签: mysql sql

我有一个包含列重量,高度,膝盖,日期,id的表我想在同一个表中找到两行 - 第一行是min(重量),另一行是max(weight)。即使所有内容都在同一个表中,我如何访问这两行的日期和ID。

2 个答案:

答案 0 :(得分:0)

尝试搜索最小和最大重量:

SELECT *
FROM yourTable
WHERE
    weight = (SELECT MIN(weight) FROM yourTable) OR
    weight = (SELECT MAX(weight) FROM yourTable);

请注意,如果有多个记录与最小/最大权重相关联,则上述查询可能会产生超过2条记录。如果关系是可能的,那么你应该提供如何处理这个问题的逻辑。

如果您使用的是MySQL 8或更高版本,并且可以访问ROW_NUMBER,那么这里有一个灵活的解决方案:

SELECT *
FROM
(
    SELECT *,
        ROW_NUMBER() OVER (ORDER BY weight) rn1,
        ROW_NUMBER() OVER (ORDER BY weight DESC) rn2
    FROM yourTable
) t
WHERE 1 IN (rn1, rn2);

答案 1 :(得分:0)

脑海中浮现出

union all

(select t.*
 from t
 order by weight asc
 limit 1
) union all
(select t.*
 from t
 order by weight desc
 limit 1
);

如果您有weight的索引,那么这在性能方面应该是最佳的。

这确保了结果集中的两行,即使存在联系。