T-SQL - 删除大型 table

T-SQL - Deduplicate large table

抱歉,如果有人问过这个问题。我看到很多类似的问题,但 none 与这个完全一样。
我正在尝试删除大量(约 500 M)记录的重复数据:

示例数据:

CUST_ID  PROD_TYPE  VALUE  DATE
------------------------------------
1        1          Y      5/1/2015 *
1        2          N      5/1/2015 *
1        1          N      5/2/2015 *
1        2          N      5/2/2015 
1        1          Y      5/3/2015 *
1        2          Y      5/3/2015 *
1        1          Y      5/6/2015 
1        2          N      5/6/2015 *

通过CUST_IDPROD_TYPE,我需要保留初始记录以及任何已更改的记录VALUE(带星号的记录)。 日期之间有时会存在间隔。大约有 500 万个 CUST_ID 的唯一性。

如有任何帮助,我们将不胜感激。

不确定为什么 LAG 不适合您,returns 您的结果:

with t as (
     select 1 as CUST_ID, 1 as PROD_TYPE, 'Y' as VALUE, '5/1/2015' as [Date]
    union
    select 1, 2, 'N', '5/1/2015'
    union
    select 1, 1, 'N', '5/2/2015'
    union
    select 1, 2, 'N', '5/2/2015'
    union
    select 1,1, 'Y', '5/3/2015'
    union 
    select 1, 2, 'Y','5/3/2015'
    union
    select 1,1, 'Y', '5/6/2015'
    union
    select 1, 2,'N','5/6/2015')

select 
    *,
    case when 
        value <>
        isnull(lag(value) over (partition by cust_id, prod_type order by [date]),'') 
        then 1 else 0 
    end as keep 
from
    t
order by
    [date],
    cust_id,
    prod_type

谢谢凯尔,这是完全正确的,我可以用它来解决我的问题。我遇到的问题(不熟悉滞后)是我未能提供默认值,因此日期中的差距正在创建一个 NULL 值,这给我带来了问题,但一旦我提供了它,它就像一个魅力。谢谢!