Sql 验证ID是否通过所有以前的阶段

Sql 验证ID是否通过所有以前的阶段,sql,postgresql,postgresql-9.1,Sql,Postgresql,Postgresql 9.1,假设一个id有5个阶段(02、03、04等)。id应该经过每个阶段。在此示例中,Id=1跳过04和02阶段,但Id=2通过所有阶段。因此,它应该是当前阶段-1和-2等 我必须识别跳过阶段的ID。我需要使用PostgreSQL查询来执行此操作。假设当前/以前的每个id都是唯一的: id current stage previous stages 1 06 05 1 06 03 2 04

假设一个id有5个阶段(02、03、04等)。id应该经过每个阶段。在此示例中,Id=1跳过04和02阶段,但Id=2通过所有阶段。因此,它应该是当前阶段-1和-2等


我必须识别跳过阶段的ID。我需要使用PostgreSQL查询来执行此操作。

假设当前/以前的每个id都是唯一的:

id  current stage  previous stages
1      06              05
1      06              03

2      04              03
2      04              02
编辑:

我以前的查询逻辑错误,应该是
而不是
。
这应包括您的以下要求:

select id
from tab
group by id
having min(previous_stage) <> 2           -- doesn't start with 2
    or max(current_stage) - 2 <> count(distinct previous_stage) -- there's at least one missing stage

假设每个id的当前/以前是唯一的:

id  current stage  previous stages
1      06              05
1      06              03

2      04              03
2      04              02
编辑:

我以前的查询逻辑错误,应该是
而不是
。
这应包括您的以下要求:

select id
from tab
group by id
having min(previous_stage) <> 2           -- doesn't start with 2
    or max(current_stage) - 2 <> count(distinct previous_stage) -- there's at least one missing stage

阶段是否按顺序编号为2,3,4,5,6?阶段的数据类型是什么?不是顺序的。并且数据类型为整数。如果票证的当前阶段为4,则之前的阶段应为2,3,4(不一定按顺序),但不应遗漏2,3,4中的任何一个。阶段是否按顺序编号为2,3,4,5,6?阶段的数据类型是什么?不是顺序的。并且数据类型为整数。如果票证的当前阶段为4,则前几阶段应为2,3,4(不一定按顺序),但不应错过2,3,4中的任何一个。感谢Dnoeth。但当前阶段每个id有一个值,前几阶段每个id可以包含相同的值。@buntysahoo:然后切换到
计数(不同的前几阶段)
而不是
count(*)
非常感谢..逻辑有效。脱帽致敬..投票结果正确有一个转折。我不能使用count。这在某些情况下是错误的。如果当前阶段是5,但之前的阶段是6,4,2怎么办。总共8个阶段,一个id可以占据任何阶段,甚至更大。@buntysahoo。然后将
上一个阶段
。如果这不起作用,那么你应该接受这个答案——因为它回答了这个问题——然后再问另一个问题。将“前一阶段”解释为较低的值是对问题的真正有效的解释。谢谢Dnoeth。但是当前阶段每个id有一个值,前一阶段每个id可以包含相同的值。@buntysahoo:然后切换到
count(不同的前一阶段)
而不是
count(*)
非常感谢..逻辑起作用了。脱帽致敬..投票结果是正确的有一个转折点。我不能使用计数。这在某些情况下是错误的。如果当前阶段是5,但之前的阶段是6,4,2怎么办。总共8个阶段,一个id可以占据任何阶段,甚至更大。@buntysahoo。然后将
上一个阶段
。如果这不起作用,那么你应该接受这个答案——因为它回答了这个问题——然后再问另一个问题。将“前一阶段”解释为较低的值是对问题的真正有效的解释。