【问题标题】:SQL: Correct e.g. 1,2,4,5,7 to 1,2,3,4,5 (queue order)SQL:正确,例如1,2,4,5,7 到 1,2,3,4,5(队列顺序)
【发布时间】: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,您应该始终在 先前生成的序列号之后获取下一个序列号>.

标签: c# sql asp.net ms-access


【解决方案1】:

不要碰桌子。

使用查询,只需按递增的自动编号或呼入时间(您可能也有)对队列进行排序,然后添加一个行计数器来显示队列立场。

【讨论】:

  • 什么是呼入时间,行计数器是什么意思?是否可以给出示例代码?对不起,我还在学习编码。提前致谢。
  • 大多数呼叫系统都会记录呼叫的时间和持续时间。行计数器是一个按顺序对记录进行编号的函数 - 正如您使用 c#、sql、asp.net 和 ms-access 标记的那样,此处列出的选项很多。
【解决方案2】:

对于表名队列,包含字段 Customer 和 Position:

SELECT Queue.Customer, Queue.Position, (select count(customer) from Queue T where T.position<=Queue.Position) AS [Index]
FROM Queue
GROUP BY Queue.Customer, Queue.Position;

索引是没有间隙的新队列位置。

显然,在向队列中添加新人员时,Position 字段必须增加 1 - 您不能将 Index+1 用于新客户的 Position。

【讨论】:

    猜你喜欢
    • 2012-05-06
    • 1970-01-01
    • 2013-09-22
    • 1970-01-01
    • 2019-06-23
    • 2018-03-05
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多