mysql - 从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) (按行)。
解决方案
一种选择是使用找到最小值的子查询:
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);
推荐阅读
- php - 如何在 url 中使用 echo
- php - 超薄框架 2.6.3 不支持破折号
- r - rpart中如何获取父节点的名字?
- c# - C# .NET 应用程序中的 ITK
- c# - 带有嵌入式 dll 的应用程序无法在另一台计算机上运行
- marathon - Marathon:强制从 App 获取资源
- python - 为什么我的代码会导致 Pandas 中的 SettingWithCopyWarning?
- r - 如何添加一个覆盖整个数据而忽略分组的图?
- javascript - 如何使用 Javascript 中的工厂传递数组信息?
- c - fcntl() 的返回值带有 F_GETFD 标志?