选择更改时的时间点

时间:2009-11-23 16:12:50

标签: sql

说我有下表:

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

我该怎么做?

2 个答案:

答案 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')
)

希望我没有在嵌套查询中搞砸了。这只会给你一个用户,你可以将它包装在一个函数中,并调用它来传递用户名,或者做一些像插入不同名称的临时表并循环遍历这些名称。

有很多选项可以让它只为一个用户提供给所有用户。