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);
我正在尝试查询列的最小值及其时间戳。
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);