我在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等进行分组。如果您需要进一步的帮助,请把问题问得更具体一些。