2016-08-17 95 views
1

我在MySQL中有兩個表。mysql選擇與左連接的兩個匹配行的最新時間戳

日誌表中的列:時間,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