一直在研究这个问题。希望有人能够提供一些见解。我有3张桌子。所有这些我都抓住了多个列,但第三个我需要将输出限制为最近的时间戳条目,但仍然显示多个列。 如果我有以下数据[请参阅SQL小提琴]:
http://sqlfiddle.com/#!2/84b91/6
小提琴是Table2(作业)中Table1(用户),(job_name,years)中的(名称)列表,然后是Table3(job_details)中的(score,timestamp)。全部由用户ID链接在一起。
我绝对不擅长MYSQL。我知道我错过了一些东西......可能是一系列的JOIN。通过这样做,我能够得到表1,表2和表3的一列:
select a.id, a.name, b.job_name, b.years,
(select c.timestamp
from job_details as c
where c.user_id = a.id
order by c.timestamp desc limit 1) score
from users a, job as b where a.id = b.user_id;
此时,我可以在前两列上获得多个列数据,将第三个值限制为一个值并在最后一个时间戳上对该值进行排序......
我的问题是:如何将第二列添加到限制中?在小提琴中的示例中,我想将分数和时间戳添加到输出中。
我希望输出为:
NAME,JOB,YEARS,SCORE,TIMESTAMP。最后两列只是job_details中最后一个按最新TIMESTAMP排序的条目。
如果需要更多信息,请告诉我们!感谢您的时间! Ť
答案 0 :(得分:1)
试试这个:
select a.id, a.name, b.job_name, b.years, c.timestamp, c.score
from users a
INNER JOIN job as b ON a.id = b.user_id
INNER JOIN (SELECT jd.user_id, jd.timestamp, jd.score
FROM job_details as jd
INNER JOIN (select user_id, MAX(timestamp) as tstamp
from job_details
GROUP BY user_id) as max_ts ON jd.user_id = max_ts.user_id
AND jd.timestamp = max_ts.tstamp
) as c ON a.id = c.user_id
;