2012-03-20 97 views
0

我有兩個表在MySQL數據庫 -數據庫查詢來獲取最近更新的實體

/* main theatre table */ 
CREATE TABLE THEATRE 
(
id VARCHAR(100) PRIMARY KEY, 
name VARCHAR(100) NOT NULL, 
location VARCHAR(100), 
type VARCHAR(100), /* comma separated values */ 
createDateTime BIGINT NOT NULL /* Current time in milliseconds everytime a record is inserted */ 
); 


/* table to capture all theatre activity */ 
CREATE TABLE THEATRE_ACTIVITY 
(
id VARCHAR(100) PRIMARY KEY, 
theatreId VARCHAR(100) NOT NULL REFERENCES THEATRE(id), 
activity VARCHAR(20), /* (RATED | CREATED | EDITED) */ 
createDateTime BIGINT NOT NULL /* Current time in milliseconds everytime a record is inserted */ 
); 

每當有一個記錄插入T中HEATRE_ACTIVITY表在THEATRE的活動。我需要根據從最近到最後的THEATRE_ACTIVITYcreateDateTime獲取所有THEATRE的所有(distinct)名稱,ID和位置。

有人可以幫我嗎?

回答

0
select id, name, location 
from theatre INNER JOIN 
(select theatreid, MAX(createDateTime) 
from theatre_activity 
group by theatreId) ta ON theatre.id = ta.theatreId 

該查詢將獲取所有不同的劇院(假設劇院表中沒有重複),其中有戲劇活動。 如果有多個活動,則選擇最近的活動。這是我從你的問題陳述中理解的。

+0

感謝@Zohaib,但是,我得到同樣的錯誤您所查詢的,因爲我從納文的 - 未知列「ta.theatreid」在「關於條款」。你能幫我解決這個問題嗎? – 2012-03-22 14:16:16

0

我提供了一個查詢,我從你的問題陳述中瞭解到。

select DISTINCT t.id, t.name, t.location from theatre t, theatre_activity ta where t.id = ta.theatreId order by t.id desc 
+0

謝謝@Kandarp。這不起作用。實際上,我試圖根據他們的活動順序從大到小排列所有影院。並且因爲活動存儲在一個單獨的表中。 – 2012-03-22 14:17:36

0

嘗試此查詢

select id, name, location, ta.td 
from theatre INNER JOIN 
(select theatreid, MAX(createDateTime) td 
from theatre_activity 
group by theatreId ) ta ON theatre.id = ta.theatreId order by ta.td desc 
+0

謝謝@Naveen,但是,查詢給了我下面的錯誤 - 'on子句'中的未知列'ta.theatreid'。你能幫我解決這個問題嗎? – 2012-03-22 14:15:37

+0

這個查詢是否適用於''atatreid,MAX(createDateTime)td fromatre_activity group byatreId'? – 2012-03-26 04:28:02