我正在尝试查询列的最小值及其时间戳。
表“汽车”:
+----+------------+-------+
| 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)。
答案 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);