2016-08-17 5 views
1

私はMySQLに2つのテーブルを持っています。mysqlは左結合で2つの一致する行の最新のタイムスタンプを選択します

テーブルには列がありログ:メール、ID

ログファイルを生成システムにユーザーがログインするたびに:時間、USER_ID、EVENT_TYPE

ユーザーテーブルには列がありますevent_type列の値は、値 '/ dashboard'とともに記録されます。

select文はここで、彼らはログイン私のごと時間が表示されます...

SELECT users.email, logs.time 
FROM users 
LEFT JOIN logs ON users.id=logs.user_id 
WHERE logs.event_type LIKE '/dashboard' 
GROUP BY email, time; 

...しかし、私はのみの電子メールアドレスとタイムスタンプを示し、結果セットを返すようにしたいです初めて各ユーザーがログインし

答えて

3

あなたはそのためminを使用することができます。

SELECT users.email, min(logs.time) 
FROM users 
    INNER JOIN logs ON users.id=logs.user_id 
WHERE logs.event_type LIKE '/dashboard' 
GROUP BY email; 

またouter joinの必要はありません - あなたはあなたのwhere基準を否定しています。あなたがouter joinを維持し、logsテーブル内のレコードに一致していない可能性がありますユーザーを返すようにしたい場合は、onに基準を動かす:

SELECT users.email, min(logs.time) 
FROM users 
    LEFT JOIN logs ON users.id=logs.user_id 
     AND logs.event_type LIKE '/dashboard' 
GROUP BY email; 
+0

をあなたの答えで提供どちらの例も、魅力のように働いた、ありがとう! INNER JOINは3秒間しか実行できませんでしたが、LEFT JOINは1分28秒かかりました。私は迅速な支援に感謝! – dmohr

関連する問題