从 to-be-found-row +1 中找到另一行具有相同字段值的所有行

Posted

技术标签:

【中文标题】从 to-be-found-row +1 中找到另一行具有相同字段值的所有行【英文标题】:Find all rows where there is another row which has in same field value from to-be-found-row +1 【发布时间】:2020-10-08 20:21:14 【问题描述】:

我有下表(为清楚起见,发出了不相关的字段和行):

customerID        MediaIDdec
--------------    ----------------------
.                 .
.                 .
.                 .
16253             453456691
36178             453456692
24352             671254112
81432             226124312
44513             226124313
31336             226124314
64231             453653811
.                 .
.                 .
.                 .

查询应返回另一行 (row2) 中的 MediaIDdec 为 MediaIDdec (Row1) + 1 的所有行 (row1)。

从上面的示例表中,这将返回:

16253             453456691     (because there is MediaIDdec+1 within row with customerID 36178)
81432             226124312     (because there is MediaIDdec+1 within row with customerID 44513)
44513             226124313     (because there is MediaIDdec+1 within row with customerID 31336)

老实说,我的 SQL 技能不足以解决这样的查询。

提示:表格在 MediaIDdec 之后排序。

非常感谢您的帮助。

【问题讨论】:

提示,试试lead 【参考方案1】:

你可以使用exists:

select t.*
from mytable t
where exists (select 1 from mytable t1 where t1.MediaIDdec = t.MediaIDdec + 1)

如果MediaIDdec 没有重复项,则可以选择lead()

select *
from (
    select t.*, lead(MediaIDdec) over(order by MediaIDdec) leadMediaIDdec 
    from mytable t
) t
where leadMediaIDdec = MediaIDdec + 1

【讨论】:

“领先”解决方案对我来说非常有效。感谢您的超快速回答:-)【参考方案2】:

如果您发现基于 join 的解决方案更容易理解

select t1.*
from t t1
join t t2 on t2.MediaIDdec = t1.MediaIDdec + 1 

【讨论】:

谢谢。虽然我没有尝试过(因为我已经可以成功使用 GMB 的答案),但你的回答对我来说很有意义。谢谢【参考方案3】:

这种方法使用 LEAD 函数

with lead_cte as (
    select *, lead(MediaIDdec) over (order by MediaIDdec)-MediaIDdec MediaIDdec_lead_diff
    from tTable)
select *
from lead_cte
where MediaIDdec_lead_diff=1;

【讨论】:

以上是关于从 to-be-found-row +1 中找到另一行具有相同字段值的所有行的主要内容,如果未能解决你的问题,请参考以下文章

如何从数组中找到3个数字的组合,当添加时,它等于另一个给定的数字

python - 如何从具有另一个属性的属性中找到最大值作为Python中的要求? [复制]

根据另一列的位置从一组列中返回值

将一个数组值与另一个多维数组匹配,然后从多维数组中获取值

excel中,如何实现从一个表中检索数据,并排列到另一个表中。

从数组中查找最近的位置(iOS)[关闭]