Select 来自 mysql 查询的最小值和该最小值的时间戳

Select min value AND timestamp of that min value from mysql query

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

Table "cars":

+----+------------+-------+
| 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 对应于关联的最小值(按行)。

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

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