0

我有以下结构:

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)

但是,只有日期是正确的,如果我尝试打印出地点的名称,它将不是与最大日期的会议相关联的地点,但它实际上打印了我从中获得的第一行的地点出席餐桌。

根据会议日期查找最大出席日期的最佳方法是什么?

4

1 回答 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

样本输出:

| 用户名 | 会议 | PLACE_NAME | 日期 |
-------------------------------------------------- ------------------
| 用户 1 | 2 | 地点 2 | 2013 年 8 月 11 日 00:00:00+0000 |
| 用户 2 | 1 | 地点 1 | 2013 年 7 月 12 日 00:00:00+0000 |
| 用户 3 | 1 | 地点 1 | 2013 年 7 月 12 日 00:00:00+0000 |

这是SQLFiddle演示

于 2013-08-25T01:09:03.997 回答