说我有下表:
id Name Status Date
1 John Working 11/11/2003
2 John Working 03/03/2004
3 John Quit 04/04/2004
4 John Quit 04/05/2004
5 John Quit 04/06/2004
6 Joey Working 03/05/2009
7 Joey Working 02/06/2009
8 Joey Quit 02/07/2009
9 Joey Quit 02/08/2009
10 Joey Quit 02/09/2009
我想知道工作和退出之间发生变化的日期,以便我得到:
3 John Quit 04/04/2004
8 Joey Quit 02/07/2009
我该怎么做?
答案 0 :(得分:2)
select ID, Name, Status, Date
from tableName
where ID in (
select min(ID)
from tableName
where Status = 'Quit'
)
这将获得每个人具有“退出”状态的第一条记录。然而,它不一定是按时间顺序排列的第一张唱片。如果那是您正在寻找的,请告诉我。另外,如果是这样,你能否确定不会有任何重复的名字;如果有两个不同的John或Joey,这可能会有问题。
答案 1 :(得分:1)
select id, name, date
from tableName WHERE date =
(select MIN(date)
FROM tableName
WHERE NAME='<name>' AND date >= (select MAX(date)
FROM tableName WHERE NAME='<name>' AND status = 'Working')
)
希望我没有在嵌套查询中搞砸了。这只会给你一个用户,你可以将它包装在一个函数中,并调用它来传递用户名,或者做一些像插入不同名称的临时表并循环遍历这些名称。
有很多选项可以让它只为一个用户提供给所有用户。