我有一张表和下面的数据。 每个记录的ID都是不同的,recno是记录号,它会在下表中进行多次状态更改。我需要查询处于错误状态且永远不会进入关闭状态的recno。从下面的示例数据我得到recno 3作为结果,因为记录1和2有错误状态但是那些已经关闭状态。
**ID recno status**
1 1 Started
2 1 inProgress
3 1 released
4 1 error
5 1 closed
6 2 Started
7 2 inProgress
8 2 released
9 2 error
10 2 error
11 2 Closed
12 3 Started
13 3 inProgress
14 3 released
15 3 error
答案 0 :(得分:0)
如果您想要最后一个状态,可以执行以下操作:
select t.*
from t
where t.id = (select max(t2.id) from t t2 where t2.recno = t.recno);
如果您想要处于错误状态的那些:
select t.*
from t
where t.id = (select max(t2.id) from t t2 where t2.recno = t.recno) and
t.status = 'error';
注意:在大多数数据库中,甚至在某些版本的Sybase中,您也可以使用row_number()
进行此查询。但是,并非所有版本的Sybase都支持窗口函数。