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_ID
和PROD_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 值,这给我带来了问题,但一旦我提供了它,它就像一个魅力。谢谢!
抱歉,如果有人问过这个问题。我看到很多类似的问题,但 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_ID
和PROD_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 值,这给我带来了问题,但一旦我提供了它,它就像一个魅力。谢谢!