【问题标题】:Select min value AND timestamp of that min value from mysql query [duplicate]从mysql查询中选择最小值和该最小值的时间戳[重复]
【发布时间】:2019-10-26 01:11:32
【问题描述】:

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

表“汽车”:

+----+------------+-------+
| 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)(按行)。

【问题讨论】:

    标签: mysql max min


    【解决方案1】:

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

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

    【讨论】:

    • 选项 1 非常慢...
    • 试试LIMIT 选项,如果这对你有用。
    • 选项 2 - LIMIT - 是炸弹!很棒的答案!谢谢
    • 实际上,如果我们添加正确的索引,以上三个选项中的任何一个都可以快速完成。但也许你甚至不需要这样做。
    • 查看我的答案的编辑。尝试添加该索引,所有三个查询都应该执行得更快。
    猜你喜欢
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    • 2013-10-26
    • 2012-12-03
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    相关资源
    最近更新 更多