我有以下结构:
Attended:
id
user
date
Meetings:
id
data
place
Places
id
name
users
id
name
我正在尝试获取用户参加 session 的最长日期,我可以通过运行以下命令来做到这一点:
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)
但是,只有日期才是正确的,如果我尝试打印出地点的名称,它不会是与最大日期的 session 相关联的地点,但它实际上会打印我的第一行的地点。从出席表中获取。
根据 session 日期查找最长出席日期的最佳方法是什么?
最佳答案
您正在寻找这样的东西吗?
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 演示
关于Mysql 选择具有多个连接的 Max,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18423938/