2016-08-13 7 views
0

ネストされた 'select max(date)'スタイルステートメントを取り巻くロジック/構文が難しいです。説明しようとしましょう。mysql内でmax(date)文をネストするINNER JOIN

表#1(table1_companies) [ID、会社名、産業]

表#2:(table2_companydata) [ID、会社名、データ、DATE_ADDED私は私の文がからデータを引っ張っている3つのテーブルを持っています]

表#3:(table3_watchlist) [ID、会社名、usernane]

私が実行しようとしてるの文は、表3から会社名を取り、INNER表1から '産業' をJOINS INNER JOINSが最新の企業情報に基づいています(th最後の日付)を表2に示します。表2は会社ごとに多くの行を持つことができます。追加された最新の日付に基づいて最後の行のみが必要です。最後の日付をつかむしようとすることなく、私の現在の(単純化)ステートメントは次のとおりです。

SELECT 
table1_companies.industry, 
table2_companydata.data, 
table3_watchlist.* 

FROM 
table3_watchlist 
INNER JOIN table1_companies ON table1_companies.companyname =   table3_watchlist.companyname INNER JOIN table2_companydata ON table2_companydata.companyname = table3_watchlist.companyname WHERE username='username'"); 

私は第二INNERに「最大table2_companydata FROM(DATE_ADDED)を選択し、」JOINを挿入する必要があると思います。しかし、私は論理や構文のいずれかで成功していない。誰でも私を啓発することができますか?

答えて

0

joinの間で最後のレコードを選択します。ロジックにwhere句を使用する1つの方法は次のとおりです。

SELECT c.industry, cd.data, w.* 
FROM table3_watchlist w INNER JOIN 
    table1_companies c 
    ON c.companyname = w.companyname INNER JOIN 
    table2_companydata cd 
    ON cd.companyname = w.companyname 
WHERE username = 'username' AND 
     cd.date_added = (select max(cd2.date_added) 
         from table2_companydata cd2 
         where cd2.companyname = cd.companyname 
        );