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

时间:2015-04-02 08:11:13

标签: mysql

我有2张桌子。 表A和表B

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

表B包含3列,即“is_completed”,“user_id”和“work_id” ......

表B跟踪用户完成的工作细节以及工作是否完成。如果完成,则可以为该用户分配另一项工作。

问题陈述: 我为一个用户1分配了一个工作,他的is_completed是0(工作没有完成)...现在我假设在几天之后,他的工作完成了,所以我做了__completed为1但同时我分配了另一个工作到相同的用户1现在is_completed为0.所以我有两行相同的用户,一行is_completed为1,另一行is_completed为表B中的0。

如何获取最新的is_completed,即用户1正在工作或说忙?

3 个答案:

答案 0 :(得分:0)

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
+---------+

如果用户1当前处于任务中间,则此查询将返回2,表示最近的work_id只有一条记录。如果用户已完成上一个任务但尚未收到新任务,则会返回1,表示最近work_id的两个记录(开始和停止)。

我假设被分配的work_id总是在增加。

答案 1 :(得分:0)

像这样:

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

小提琴:http://sqlfiddle.com/#!9/03aa7/9

查询会将所有用户及其当前可用性返回为“忙碌”或“可用”,具体取决于他们最近的工作条目的状态。请注意,这取决于work_id是一个升序的,从不重复的值,并且work_id大于另一个work_id的概念,保证是两者中最近的一个。

如果您希望它显示特定user_id的状态,只需将AND user_id = ??附加到上述查询

答案 2 :(得分:0)

 select t.user_id,t.is_completed from( select * from
     TableB
    order by work_id desc )as t group by t.user_id

这将提供用户的最新工作状态