2014-07-05 88 views
0

我有一個表,其中包含以下列'rack_id','epoch'和'temp'。MySQL聲明,最新最新紀元12個唯一記錄

我想要一個語句,它挑選12個最新記錄(基於時代),以便選擇rack_id,並按機架ID對它們進行排序。

我至今是:

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

,我不能想出解決問題的(甚至環顧互聯網和前面的問題後)唯一位延伸到說,每個語句記錄應該是最新的(基於時代)。

爲了在上面的示例語句中做出澄清,我希望結果是每個rack_id的單行,並且該記錄是基於時期列的最近期記錄。

+0

可能重複的[SQL只選擇列上最大值的行](http://stackoverflow.com/questions/7745609/sql-select-only-rows-with -max值-ON-A柱) –

回答

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子句是多餘的,可以刪除

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