2013-08-24 63 views
0

我有以下結構:Mysql的選擇與最大多加入

Attended: 
    id 
    user 
    date 


Meetings: 
    id 
    data 
    place 

Places 
    id 
    name 

users 
    id 
    name 

我試圖讓用戶參加了此次會議最大的日期,我可以通過運行以下要做到這一點:

select (meetings.date), places.name, meetings.id, attend.user 
from attend 
    inner join meetings on meetings.Id = attend.meeting 
    inner join places on meetings.place = places.id 
WHERE meetings.date IN (select max(meetings.date) from meetings) 

然而,只有日期是正確的,如果我嘗試打印出地點的名稱也不會是用最大日會議有關的地方,但它實際上與第一打印位置我從參加的桌子上得到的一排。

根據會議日期查找最長入院日期的最佳方法是什麼?

+0

您的查詢應該返回誰出席上有一個會議日期最近會議的所有用戶。不過,我不能說這是否是你真正想要的。 –

+0

是的,這是我真正想要的,我確實知道,但地名將返回不正確的信息。如果我最後一次出席是爲A地點舉行的會議1,但是我的第一次出席是用於會議2,即地點B,那麼查詢將打印地點B而不是A – Dani

+0

選擇一行的好方法列是最大值(或最小值)是通過它來排序並限制結果集:'ORDER BY meetings.date DESC LIMIT 1'。我會張貼這個答案,但根據你的問題,我不完全確定你在找什麼。 –

回答

1

你在找這樣的事嗎?

SELECT a.user_name, a.meeting, a.place_name, a.date 
    FROM 
(
    SELECT a.user, a.meeting, m.date, p.name place_name, u.name user_name 
    FROM attended a JOIN meetings m 
     ON a.meeting = m.id JOIN places p 
     ON m.place = p.id JOIN users u 
     ON a.user = u.id 
) a JOIN 
(
    SELECT a.user, MAX(m.date) date 
    FROM attended a JOIN meetings m 
     ON a.meeting = m.id 
    GROUP BY user 
) q 
    ON a.user = q.user 
    AND a.date = q.date 
ORDER BY user_name 

輸出示例:

 
| USER_NAME | MEETING | PLACE_NAME |       DATE | 
-------------------------------------------------------------------- 
| User 1 |  2 | Place 2 | August, 11 2013 00:00:00+0000 | 
| User 2 |  1 | Place 1 | July, 12 2013 00:00:00+0000 | 
| User 3 |  1 | Place 1 | July, 12 2013 00:00:00+0000 | 

這裏是SQLFiddle演示