很抱歉,如果已经询问过这个问题。我看到很多类似的问题,但没有一个完全像这个。
我试图去掉一大套(约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
的记录(带星号的记录)。 日期之间有时会有差距。大约有5M个独特的CUST_ID
。
非常感谢任何帮助。
答案 0 :(得分:0)
Not sure why LAG isn't working for you, this returns your results:
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
答案 1 :(得分:0)
谢谢Kyle,这是完全正确的,我能够将其作为我问题的解决方案。我遇到的问题(不熟悉滞后)是我没有提供默认值,所以日期的差距是创建一个NULL值,这给了我一些问题,但是一旦我提供了它,它就像一个魅力。谢谢!