我有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正在工作或说忙?
答案 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
这将提供用户的最新工作状态