【问题标题】:Count lead duplicate rows计算潜在客户重复行
【发布时间】:2020-01-21 16:33:21
【问题描述】:

我有下表

表 A:

row_number  id    start_dt    end_dt   cust_dt    cust_id
   1        101    4/8/19     4/20/19   4/10/19   725
   2        101    4/21/19    5/20/19   4/10/19   456
   3        101    5/1/19     6/30/19   4/10/19   725
   4        101    7/1/19     8/20/19   4/10/19   725

出于测试目的,我需要计算表格中的“重复项”。

标准: 需要从我的计算中排除 start_dt 和 end_dt。 如果 lead 行重复,则它只是重复。因此,例如第 1 行、第 3 行或第 4 行是相同的,但在此示例中只有第 3 行和第 4 行将被视为重复项。

我尝试过的: ranklead 和自我加入,但这似乎对我不起作用。

如何计算 id 以确定是否有重复项?

输出:(如下所示)

count    id 
  2      101

对我来说,最终结果是表格的计数为 1

count  id
 1     101

【问题讨论】:

  • 为什么有两列叫id
  • @GMB 将最后一个 id 更新为 cust_id
  • 您可以使用 ROW_NUMBER() OVER (PARTITION BY id,start_dt,end_d,cust_dt, cut_id ORDER BY id,start_dt,end_d,cust_dt, cut_id) 作为 RN,然后所有 RN > 1 的都是已经存在,因此您可以轻松地数数。

标签: sql oracle count lead


【解决方案1】:

使用row_number解析函数如下(缝隙和孤岛问题):

Select count(1), id from
(Select t.*, 
        row_number() over (order by row_number) as rn,
        row_number() over (partition by id, cust_dt, cust_id order by row_number) as part_rn
   From your_table t)
Group by id, cust_dt, cust_id, (rn-part_rn)
Having count(1) > 1

db<>fiddle demo

干杯!!

【讨论】:

  • @BarbarosÖzhan,我认为它会产生所需的 2 输出。
  • 看看this
  • 哦,是的,用更改的GROUP BY 子句更新了答案
【解决方案2】:

如果你对重复行的定义是:lead 行中的CUST_ID(与row_number 相同的id 顺序)等于当前CUST_ID

您可以使用LEAD 分析函数简单地写下来。

select ID, ROW_NUMBER, CUST_ID,
case when CUST_ID = lead(CUST_ID) over (partition by id order by ROW_NUMBER) then 1 end is_dup
from tab

        ID ROW_NUMBER    CUST_ID     IS_DUP
---------- ---------- ---------- ----------
       101          1        725           
       101          2        456           
       101          3        725          1
       101          4        725       

获取重复行数的聚合查询会比

with dup as (
select ID, ROW_NUMBER, CUST_ID,
case when CUST_ID = lead(CUST_ID) over (partition by id order by ROW_NUMBER) then 1 end is_dup
from tab)
select ID, sum(is_dup) dup_cnt
from dup
group by ID

        ID    DUP_CNT
---------- ----------
       101          1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多