Mysql 从表中同一用户的多个条目中获取最新条目

Mysql 从表中同一用户的多个条目中获取最新条目,mysql,Mysql,我有两张桌子表A和表B 表A包含各个用户的详细信息 表B包含三列,即“完成”、“用户id”和“工作id” 表B记录了用户所做工作的详细信息以及工作是否完成。如果完成,则可以为该用户分配另一项工作 问题陈述: 我将一项工作分配给用户1,而他的“完成”为0(工作未完成)…现在我假设几天后,他的工作已完成,因此我将“完成”为1,但同时我将另一项工作分配给同一用户1,而“现在完成”为0。因此,我有两行相同的用户,一行的完成为1,另一行的完成为0 如何获取最新的已完成信息,即用户1正在工作或说忙? SEL

我有两张桌子表A和表B

表A包含各个用户的详细信息

表B包含三列,即“完成”、“用户id”和“工作id”

表B记录了用户所做工作的详细信息以及工作是否完成。如果完成,则可以为该用户分配另一项工作

问题陈述: 我将一项工作分配给用户1,而他的“完成”为0(工作未完成)…现在我假设几天后,他的工作已完成,因此我将“完成”为1,但同时我将另一项工作分配给同一用户1,而“现在完成”为0。因此,我有两行相同的用户,一行的完成为1,另一行的完成为0

如何获取最新的已完成信息,即用户1正在工作或说忙?

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
将始终增加?提供一些相同的数据和预期结果。