我有一张表格,其中包含以下栏目' 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的结果都是一行,并且该记录是基于纪元列的最新记录。
答案 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
子句是多余的,可以删除