【发布时间】:2016-08-29 16:26:41
【问题描述】:
假设我们有一个支持软件,客户可以在它满员时简单地排队。对于队列中的每个客户,队列索引将增加 ++n。 索引 0 表示您不再在队列中。
但是,在客户选择离开队列的情况下,在他之后的另一个客户的队列索引不会减少。假设他的索引是 3,总共有 5 个客户在排队。
意思是:1,2,3,4,5 导致 -> 1,2,4,5 这真的很糟糕。相反,我希望它正确地纠正队列的其余部分,并减少舱口上方的每个人,直到没有更多的舱口。
如何使用 SQL 语法更正队列顺序,检查是否有任何填充,如果有,更正它?
【问题讨论】:
-
你为什么要在这里加“sql”,你是不是想把主键重新编号成连续的顺序?
-
我认为您应该提供解释如何从队列中删除人员的代码
-
为什么像
SELECT TOP 1 id FROM queue WHERE sequence > previouslyProcessedSequence ORDER BY sequence这样的东西不足以获得“序列中的下一个项目”? -
顺便说一句:很容易避免您在评论中提到的问题。不要count 并给出下一个数字(现有:1 / 5,您会看到两个元素并想给下一个“3”),而是使用
MAX()+1。在这种情况下,您会找到“5”并返回“6”... -
如果您使用数据库创建增量自动生成的唯一主键值,那么您将永远不会重复使用 3,您应该始终在 先前生成的序列号之后获取下一个序列号>.