MySQL语句,12个最新纪元的独特记录

时间:2014-07-05 18:15:47

标签: mysql sql

我有一张表格,其中包含以下栏目' rack_id',' epoch'和' temp'。

我想要一份声明,为选择的rack_id选择12条最新记录(基于纪元),并按机架ID对它们进行排序。

到目前为止我所拥有的是:

SELECT * FROM `temp_top_of_rack` WHERE `rack_id` BETWEEN 145 AND 156 ORDER BY `rack_id` ASC;

我唯一能做的事情(即使在浏览互联网和以前的问题之后)也是要扩展声明,说每条记录应该是最新的(基于时代)。

为了澄清上面的示例语句,我希望每个rack_id的结果都是一行,并且该记录是基于纪元列的最新记录。

2 个答案:

答案 0 :(得分:0)

select t1.* 
from temp_top_of_rack t1
(
   SELECT rack_id, 
          max(epoch_column) as max_epoch
   FROM temp_top_of_rack 
   WHERE rack_id BETWEEN 145 AND 156
   GROUP BY rack_id
) t2 on t1.rack_id = t2.rack_id and t1.epoch_column = t2.max_epoch
ORDER BY t1.rack_id ASC

答案 1 :(得分:0)

具有相关子选择的解决方案将是:

SELECT
    *
FROM
    temp_top_of_rack t1
WHERE
    t1.rack_id BETWEEN 145 AND 156
AND
    t1.epoch = (
        SELECT
            MAX(t2.epoch)
        FROM
            temp_top_of_rack t2
        WHERE
            t1.rack_id = t2.rack_id
    )
ORDER BY
    rack_id
LIMIT 12

说明:

这会为每个rack_id返回最近一行。我假设每个rack_id都有行,因为只有12个不同的rack_id值。所以LIMIT子句是多余的,可以删除