对条件为value1=value2+1的行进行分组

  • 本文关键字:value2+1 条件 value1 sql oracle
  • 更新时间 :
  • 英文 :


我在oracle数据库中有这两列:

SHIFTIME_NO| UserId|
-------+----------
240016     | 24    |
240017     | 24    |
240016     | 24    |
240017     | 24    |
240016     | 24    |
240016     | 24    |
240021     | 24    |
240022     | 24    |
240022     | 24    |

我的目标是将具有条件(value1=value2+1)的每两个值分组为一个值(min(value1,value2))。在本例中,我希望有这样的内容:

SHIFTIME_NO| UserId|
-------+----------
240016     | 24    |
240021     | 24    |

非常感谢您的帮助。

假设相同的userID对应相同的shiftime_id,下面的查询可以使用-

select shiftime_no, userid from 
(
select shiftime_no, UserID, row_number() over 
(order by shiftime_no) rn from tab1 group by shiftime_no, UserID
) where mod(rn,2)<>0

小提琴。

要简单地获得您所描述的确切结果,您可以使用DISTINCT并将当前条目与具有shiftime_no +1的条目连接起来:

SELECT DISTINCT y.shiftime_no, y.userid
FROM yourtable y JOIN yourtable y2
ON y2.shiftime_no = y.shiftime_no +1;

既然你以那种方式问了这个问题,我假设你确定你真的想要得到这个结果。如果没有,则需要进一步的条件或添加一些select,以添加表中最低和最高的数作为示例。或按用户id等进行分组。如果您需要进一步的帮助,请把问题问得更具体一些。

最新更新