从MySQL查询中选择最小值和该最小值的时间戳

时间:2019-06-11 15:03:13

标签: mysql max min

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

表“汽车”:

+----+------------+-------+
| 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)。

1 个答案:

答案 0 :(得分:3)

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

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