我想查询我的表并指定一些偏移量以获取我找到的表之前和之后的行。
例如获取此结果集(指定偏移量 2):
我已经尝试过 LAG/LEAD,但这只能让我获得下一行的一列,我需要一个功能,该功能基本上也将偏移行添加到结果集中。
编辑: 我的样本数据如下所示: 我得到的数据存储了纸板编号、时间戳(表示扫描纸板的时间)和生产线编号。所以基本上在我的表格中我有以下几列:
基本上,我想搜索一个 Cardboard_Number,并获取该数字之前和之后指定的偏移量。
所以更新我前面的例子:
因此,当指定例如偏移量 1 并搜索 Cardboard_Number“134”,我想获取 ID 为 5、9 和 11 的行,因为我想知道在我搜索的一个之前和之后扫描了哪个 cardboard_number per ProductionLine_Number
问题的解决方案:
SET @offset = 1;
SET @cb_num = '134';
SET @rn = 0;
WITH CTE as
(
SELECT *,
ROW_NUMBER()
OVER(PARTITION BY PRODUCTIONLINE_NUMBER ORDER BY date_TIME ASC) as RN
FROM table1
)
SELECT id
FROM CTE
WHERE RN BETWEEN (@rn := (SELECT RN FROM CTE WHERE CARDBOARD_NUMBER = @cb_num)) - @offset
AND (@rn + @offset)
AND PRODUCTIONLINE_NUMBER = (SELECT
PRODUCTIONLINE_NUMBER
FROM CTE
WHERE CARDBOARD_NUMBER = @cb_num)
dbfiddle 链接 - https://dbfiddle.uk/Cg251_2O