首页 > 解决方案 > 从mysql查询中选择最小值和该最小值的时间戳

问题描述

我正在尝试查询列的最小值及其时间戳。

表“汽车”:

+----+------------+-------+
| id | epoch_time | cars  |
+----+------------+-------+
|  1 |          1 |     5 |
|  2 |          2 |    10 |
|  3 |          3 |    15 |
|  4 |          4 |    10 |
|  5 |          5 |     3 |
+----+------------+-------+

预期结果:

+----+------------+-------+
| id | epoch_time | cars  |
+----+------------+-------+
|  5 |          5 |     3 |
+----+------------+-------+

到目前为止尝试过:

SELECT min(cars), epoch_time FROM cars;

它可以很好地拾取最小值,但 epoch_time 不正确。

我期望 epoch_time 对应于关联的 min(value) (按行)。

标签: mysqlmaxmin

解决方案


一种选择是使用找到最小值的子查询:

SELECT id, epoch_time, cars
FROM cars
WHERE cars = (SELECT MIN(cars) FROM cars);

或者,如果您确定只有一条记录具有最小值cars,那么我们可以尝试使用一个LIMIT技巧:

SELECT id, epoch_time, cars
FROM cars
ORDER BY cars
LIMIT 1;

如果您使用的是 MySQL 8+,那么我们可以尝试使用ROW_NUMBER

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (ORDER BY cars) rn
    FROM cars
)

SELECT id, epoch_time, cars
FROM cte
WHERE rn = 1;

编辑:

通过添加适当的索引,上述三个查询中的任何一个都可以快速完成。通常会起作用的索引是:

CREATE INDEX idx ON cars (cars, id, epoch_time);

推荐阅读