我有一個SQL查詢,左加入一個表。這會導致主表中的行被複制,但與JOINed表中的行不同。如何僅從JOINed表中選擇具有最高日期的行。從左加入中選擇最大的行
下面是一個例子(這是從我的查詢結果):
ID Message Date
---------------------------
0 Hi 2011-01-01
0 Bye 2011-02-05
0 Hello 2011-04-20
1 Test 2010-12-31
1 Testing 2010-11-15
2 Something 2010-12-12
2 Nothing 2011-01-01
2 Yes 2010-02-05
3 Cool NULL
我想每個ID一行,具有最高ID的行。
ID Message Date
---------------------------
0 Hello 2011-04-20
1 Test 2010-12-31
2 Nothing 2011-01-01
3 Cool NULL
我當前的查詢是這樣(我只是有點做這件事,但它是類似於真實的):
SELECT t1.ID, t2.Message, t2.Date
FROM t1
LEFT JOIN (
SELECT t3.ID, t3.message, t3.Date
FROM t3
LEFT JOIN t4 ON t4.userID = 12 AND t3.ID = t4.ID
WHERE t4.color = 'blue'
) AS t2
ON t1.ID = t2.ID
WHERE t1.userID = 12
我想我可以在結果使用PHP和循環,挑出我想要的,但我可以讓MySQL爲我做這件事嗎?
編輯:對不起,我的第一個例子是方式錯了,這更像是我想要的。
編輯2:我嘗試使用GROUP BY和MAX,但我認爲我做錯了什麼。
我想:
SELECT t1.ID, t2.Message, MAX(t2.Date)
FROM t1
LEFT JOIN (
SELECT t3.ID, t3.message, t3.Date
FROM t3
LEFT JOIN t4 ON t4.userID = 12 AND t3.ID = t4.ID
WHERE t4.color = 'blue'
) AS t2
ON t1.ID = t2.ID
WHERE t1.userID = 12
GROUP BY t1.ID
但是,這給了我:
ID Message Date
---------------------------
0 Hi 2011-04-20
1 Test 2010-12-31
2 Something 2011-01-01
3 Cool NULL
如何獲得最高的日期相關聯的消息。
內部內查詢,把一組通過對ID,然後選擇日期最大.... – 2011-04-26 18:38:57
這是我很難效仿的榜樣,但它看起來像你沿着正確的線是。可能需要更長的帖子,但是你能把一些表格結構/樣本數據放在一起嗎? – 2011-04-26 18:39:36
@Rocket - t3的主鍵是't3.Id'還是純粹是't1'表的外鍵? – Thomas 2011-04-26 18:43:43