2017-01-02 59 views
1

我正在使用以下查詢來獲取用戶的最近記錄。加入與另一個表的SQL查詢

SELECT t1.username, t1.value, t1.date 
FROM table t1 
JOIN (select username, max(date) as maxdate from table 
     group by username) t2 on t1.username = t2.username 
          and t1.date = t2.maxdate 
WHERE t1.date >= CURDATE() 
ORDER BY t1.date DESC 

它返回以下結構的表

------------------------ 
username | value | date 
------------------------ 

我有以下結構

---------------------------- 
username | category | group 
---------------------------- 

我怎樣才能得到類似下面的表格結構

結果的另一個表(T3)
------------------------------------------- 
username | value | date | category | group 
------------------------------------------- 

如何加入這些關係?

回答

4

你可以加入它的follwing方式:

SELECT t1.username, t1.value, t1.date, t3.category, t3.group 
FROM table t1 
JOIN (select username, max(date) as maxdate from table 
     group by username) t2 on t1.username = t2.username 
          and t1.date = t2.maxdate 
JOIN table3 t3 ON t3.username=t1.username 
WHERE t1.date >= CURDATE() 
ORDER BY t1.date DESC 

提示:我不知道MySQL,但我認爲這是在MS SQL相同。

3

雖然直接join是最有效和最快速的方法,但如果您要在t1 select語句(例如在t2 select中)上執行諸如max(date)的操作,則可以使用類似於你在T2選擇查詢完成:

SELECT maintable.username, maintable.value, maintable.date, secondtable.category, secondtable.group 
FROM (
    SELECT t1.username, t1.value, t1.date 
    FROM table t1 
    JOIN (select username, max(date) as maxdate from table 
      group by username) t2 on t1.username = t2.username 
           and t1.date = t2.maxdate 
    WHERE t1.date >= CURDATE() 
    ORDER BY t1.date DESC 
    ) maintable 
JOIN table secondtable ON maintable.username = secondtable.username 

注意,這絕不是最好的選擇,如果你沒有創建於內選擇一個操作。

+0

感謝您的解決方案。但不知何故,它的表現並不合格。見安德烈的答案。我已經嘗試了兩者。您的查詢在我的服務器中以24.03秒返回。相反,安德烈的查詢在2.46秒內返回。雖然謝謝 –

+1

我同意,但這種解決方案不是面向性能的。 –