gpt4 book ai didi

sql - 如何确定给定标准的连续范围的大小?

转载 作者:行者123 更新时间:2023-12-04 22:41:19 24 4
gpt4 key购买 nike

我在 SQL Server 2008R2 中有一个位置表(定义如下)。

在系统框中有位置。

我需要找到一个盒子,它还有 X 个空闲位置。但是,X 位置必须是连续的(从左到右,从上到下,即升序 PositionID)。

构建一个查询来查找具有 X 个空位的框是很简单的。我现在有确定职位是否连续的问题。

关于基于 TSQL 的解决方案的任何建议?

表定义

` 创建表 [dbo].[位置](
[PositionID] [int] IDENTITY(1,1) 非空,
[BoxID] [int] 非空,
[pRow] [int] 非空,
[pColumn] [int] 非空,
[pRowLetter] [char](1) 非空,
[pColumnLetter] [char](1) 非空,
[SampleID] [int] NULL,
[ChangeReason] [nvarchar](4000) NOT NULL,
[LastUserID] [int] 非空,
[TTSID] [bigint] NULL,
约束 [PK_Position] 主键聚集
(
[位置ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) 在 [主要]`

编辑

http://pastebin.com/V8DLiucN - 带有 1 个框的样本位置的 pastebin 链接(样本数据中的所有位置都为空)

编辑 2

“空闲”位置是 SampleID = null 的位置

最佳答案

DECLARE @AvailableSlots INT
SET @AvailableSlots = 25

;WITH OrderedSet AS (
SELECT
BoxID,
PositionID,
Row_Number() OVER (PARTITION BY BoxID ORDER BY PositionID) AS rn
FROM
Position
WHERE
SampleID IS NULL
)
SELECT
BoxID,
COUNT(*) AS AvailableSlots,
MIN(PositionID) AS StartingPosition,
MAX(PositionID) AS EndingPosition
FROM
OrderedSet
GROUP BY
PositionID - rn,
BoxID
HAVING
COUNT(*) >= @AvailableSlots

诀窍是 PositionID - rn (行号)在 GROUP BY陈述。这可以将连续的集合组合在一起......从那里很容易做一个 HAVING将结果限制为 BoxID s 具有所需数量的空闲插槽。

关于sql - 如何确定给定标准的连续范围的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6666474/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com