我有两张table
表a有 usr_id , usr_name , usr_status [1 or 0]
表b有 id, usr_id,tracked_date [Each user can track multiple time]
需要获得每个用户的最后一个轨迹 usr_status = 1
如何通过mysql查询实现?
试过:
SELECT
*
FROM
tableb b
LEFT JOIN
tablea a ON a.usr_id = b.usr_id
GROUP BY a.usr_id
有什么建议吗?
1条答案
按热度按时间col17t5w1#
在派生表中,获取
tracked_date
每usr_id
将此结果集联接回主表,以获得相应的行。尝试:
在mysql版本(8.0.2及更高版本)中,我们可以使用窗口函数。使用
Row_Number()
我们可以将行数设置为1,表示行数最高的行tracked_date
值,在usr_id
. 现在,我们可以将其用作派生表,只考虑行号等于1的行。附加:如果您希望获得所有用户(
status = 1
),但不是tracked_date
尚未进入;笔直的LEFT JOIN
不会在表和派生表之间工作。我们必须首先得到对应于最大值的完整行
tracked_date
在单独的派生表中;然后做一个LEFT JOIN
从users表中,获取所有用户。结果
db fiddle视图