我想查询我的表,并指定一些偏移量,以获得我找到的表之前和之后的行.

例如,获取此结果集(指定偏移量为2):

  • 数据1
  • 数据2-->偏移量:2-->因此此行也会添加到我的结果集中
  • data 3——offset:2——所以这一行也被添加到我的结果集中>>
  • 数据4——此行满足我的查询条件>
  • 数据5-->偏移量:2-->因此此行也会添加到我的结果集中
  • 数据6-->偏移量:2-->因此此行也会添加到我的结果集中
  • 数据7

我已经try 了滞后/领先,但这只给了我获得下一行的一列的可能性,我还需要一个基本上将偏移行添加到结果集的功能.

Edit: 我的样本数据如下所示: 我得到的数据存储了一个cardboard_number,时间戳(说明当cardboard被扫描)和一个productionline_number.所以基本上在我的表格中,我有以下列:

  • ID(自动递增,int)
  • Cardboard_Number(varchar)
  • 加入时间:清华2007年01月25日下午3:33
  • ProductionLine_Number(int)

基本上,我想搜索一个Cardboard_Number,并在该数字之前和之后获得指定的偏移量.

更新一下前面的例子:

  • 2"1234"2024-03-23 17:01:01 1
  • 4"123"2024-03-24 17:01:01 1
  • 5"135"2024-03-25 09:01:01 2
  • 7"234"2024-03-25 11:01:01 1
  • 9"134"2024-03-25 13:01:01 2
  • 10"12345"2024-03-25 14:01:01 1
  • 11"12346"2024-03-25 17:01:01 2

因此,当指定偏移量1并搜索Cardboard_Number "134"时,我希望得到ID为5、9和11的行,因为我想知道在搜索的per ProductionLine_Number之前和之后扫描哪个cardboard_number

Edit 2: 在某些情况下,Cardboard_Number可以在一个ProductionLine中出现多次,也可以在其他ProductionLine中出现.

我制作了一个dbfiddle,上面展示了一些复制的纸板.在这个小提琴中,当搜索‘wdl-005943998-1’(偏移量为1)时,我希望第1行的ID为2、4、5、6、7,第2行的ID为9、10、11、12,最终得到2、4、5、6、7、9、10、11、12的结果集.

总而言之,结果集应该包含具有搜索编号的所有纸板,以及在使用该纸板的行上在搜索的纸板之前和之后扫描的另外的"偏移行".

推荐答案

解决您的问题:

SET @offset = 1;
SET @cb_num = 'WDL-005943998-1'; #Replace it with any other Cardboard Number
WITH CTE as
(
  SELECT *,
         ROW_NUMBER() 
         OVER(PARTITION BY PRODUCTIONLINE_NUMBER ORDER BY date_TIME ASC) as RN
  FROM table1
  WHERE PRODUCTIONLINE_NUMBER IN (SELECT 
                             PRODUCTIONLINE_NUMBER 
                             FROM table1 
                             WHERE CARDBOARD_NUMBER = @cb_num)
)
SELECT id, Cardboard_Number
FROM CTE as co
WHERE @offset >= ANY (SELECT ABS(co.RN - ci.RN) 
                           FROM CTE as ci 
                           WHERE CARDBOARD_NUMBER = @cb_num 
                           AND co.PRODUCTIONLINE_NUMBER = ci.PRODUCTIONLINE_NUMBER)

dbfiddle link—https://dbfiddle.uk/L9ryjZ3J

Sql相关问答推荐

如何在SQL Server中列出从当前月份开始的过go 10年中的月份

在甲骨文中查找前一个星期一的S日期

如何查找所提供日期范围的所有季度开始日期和结束日期

使用SQL创建列出两个时间戳之间小时数的列

根据最大值为字母数字大小写分配数值

如何用客户名称计算sum(dr)和sum(cr)

多条件SQL排序行为

在PostgreSQL中汇总连接表中的 case 值

仅在日期相隔时递增(Oracle SQL)

从另一个没有公共键的表中获取值来加入

MySQL中的递归查询邻接表深度优先?

将一名成员金额分配给群组内的其他成员

计算 BigQuery 中列的中值差 - 分析函数不能作为聚合函数的参数

复制SQL Server临时表

joins 组合多个重复数据删除策略

具有日期时间条件的存储过程

以 15 分钟为间隔的使用情况SQL 查询

SQL Server 分区和 Run Case 语句

PostgreSQL 中的递归树查询

postgreSQL 中的循环表