Mysql 从表中同一用户的多个条目中获取最新条目
我有两张桌子表A和表B 表A包含各个用户的详细信息 表B包含三列,即“完成”、“用户id”和“工作id” 表B记录了用户所做工作的详细信息以及工作是否完成。如果完成,则可以为该用户分配另一项工作 问题陈述: 我将一项工作分配给用户1,而他的“完成”为0(工作未完成)…现在我假设几天后,他的工作已完成,因此我将“完成”为1,但同时我将另一项工作分配给同一用户1,而“现在完成”为0。因此,我有两行相同的用户,一行的完成为1,另一行的完成为0 如何获取最新的已完成信息,即用户1正在工作或说忙?Mysql 从表中同一用户的多个条目中获取最新条目,mysql,Mysql,我有两张桌子表A和表B 表A包含各个用户的详细信息 表B包含三列,即“完成”、“用户id”和“工作id” 表B记录了用户所做工作的详细信息以及工作是否完成。如果完成,则可以为该用户分配另一项工作 问题陈述: 我将一项工作分配给用户1,而他的“完成”为0(工作未完成)…现在我假设几天后,他的工作已完成,因此我将“完成”为1,但同时我将另一项工作分配给同一用户1,而“现在完成”为0。因此,我有两行相同的用户,一行的完成为1,另一行的完成为0 如何获取最新的已完成信息,即用户1正在工作或说忙? SEL
SELECT COUNT(DISTINCT t.work_id) AS working FROM
(
SELECT * FROM
FROM TableB
WHERE user_id = 1
ORDER BY work_id DESC LIMIT 2;
) AS t
结果:
+---------+
| working |
+---------+
| 1 | // not working
| 2 | // working
+---------+
< P>此查询将返回<代码> 2代码/代码>如果用户1当前处于任务的中间,表明最近的<代码> WorksIDID/COD>只有一条记录。如果用户已完成上一个任务,但尚未收到新任务,则返回1
,表示最近的工作id有两条记录(开始和停止)
我假设分配的工作id
总是在增加。如下所示:
select u.user_id, if(ifnull(w.is_completed, 0) = 1, 'Busy', 'Available') as Status
from users u
left join work w
on u.user_id = w.user_id
left join work w2
on w.user_id = w2.user_id and w.work_id < w2.work_id
where w2.work_id is null
选择u.user\u id,如果(ifnull(w.is\u completed,0)=1,‘忙’、‘可用’)作为状态
来自用户u
左联合工作
在u.user\u id=w.user\u id上
左连接工作w2
在w.user\u id=w2.user\u id和w.work\u id
小提琴:
查询将根据用户最近的工作条目的状态,将所有用户及其当前可用性返回为“忙”或“可用”。注意,这取决于work_id是一个递增的、从不重复的值,并且大于另一个work_id的work_id保证是这两个值中较新的一个
如果您想让它显示特定用户id的状态,只需将和用户id=?
附加到上述查询中即可
select t.user_id,t.is_completed from( select * from
TableB
order by work_id desc )as t group by t.user_id
这将给出用户的最新工作状态我们是否可以假设
工作id
将始终增加?提供一些相同的数据和预期结果。