我有兩個表,一個存放與某些數據相關的記錄,另一個存放第一個錶的歷史數據。從innodb中的另一個表加入第一個有效行
對於主表的每一行,歷史表可能有多行,我想要從主表中取出一個或多個從主表中的最新記錄時加入歷史表中的最新記錄。
我已經嘗試加入使用ID的子組查詢,這沒有奏效,我不能使用限制,因爲我想選擇多個記錄。
我有兩個表,一個存放與某些數據相關的記錄,另一個存放第一個錶的歷史數據。從innodb中的另一個表加入第一個有效行
對於主表的每一行,歷史表可能有多行,我想要從主表中取出一個或多個從主表中的最新記錄時加入歷史表中的最新記錄。
我已經嘗試加入使用ID的子組查詢,這沒有奏效,我不能使用限制,因爲我想選擇多個記錄。
假設歷史表具有PK由原始ID和時間戳的
SELECT table.*, ht1.*
FROM table INNER JOIN historical_table ht1
ON table.id = ht1.id
LEFT JOIN historical table ht2
ON ht1.id = ht2.id AND ht1.timestamp < ht2.timestamp
WHERE ht2.timestamp IS NULL
邏輯
主要部分是選擇行對於其中不存在新記錄(ht2.timestamp爲null)
這是一種常見的MAX-每組這樣的問題(也有其他的方式去做)
乾杯!那有效,如果有一點令人難以置信:) – Sam 2011-03-17 14:47:12
一種方法去做:
select record.id
(select history.id from history where history.record_id = record.id order by history.id desc limit 1) as history_id
from record
如果你想要完整的查詢,你可以使用該查詢中的id作爲子查詢。其他很多方式去這太:-)
支持MySQL子查詢如下?: ... MAIN_TABLE INNER JOIN historical_data ON(main_table.col =(SELECT最新的歷史數據ID))... – 2011-03-17 14:25:57