识别不正确的历史记录处理记录

时间:2018-01-03 13:14:44

标签: teradata

由于空格/空格列在一列segment_value_cd中,我在表格中有一些数据,其中历史记录处理不正确。

我必须从表中识别出这些记录。

我尝试了一些查询,但它却把整个结果提取给我。

有没有办法只识别这些记录?

Sel * from party_segment where party_id in(6303031,6824664,216502393,6916270)
    id  Segment_Type_Cd Segment_Value_Cd    Segment_Start_Dt    Segment_End_Dt
    6,303,031   MB                             3/20/2013           6/7/2015
    6,303,031   MB         ?                    6/7/2015            ?
    6,824,664   MB                             3/20/2013           6/7/2015
    6,824,664   MB          ?                     6/7/2015          ?
    6,916,270   MB         ?                      9/28/2015         ?
    6,916,270   MB                             3/20/2013        9/28/2015
    216,502,393 NR        ?                       6/7/2015             ?
    216,502,393 NR                           8/7/2010          6/7/2015

感谢您的帮助!!

编辑:

查询也在提取此方。但是,由于segment_type_cd已更改,因此处理历史记录。

23,707  KA          7/11/2010   3/6/2011    
23,707  NM          3/6/2011    6/29/2011   
23,707  KA          6/29/2011   3/25/2014   
23,707  MB          3/25/2014   5/29/2014   
23,707  KA          5/29/2014   6/7/2015    
23,707  MB  LC      6/7/2015    9/28/2015   
23,707  KA  ?       9/28/2015         ?     

我的要求是只获取segment_type_cd保持相同并且基于空白和null segment_value_cd处理历史记录的那些方 然后将这两个记录合并为一个。就像下面那个。我必须识别这些并合并为一个。

1   6,824,664   MB          3/20/2013   6/7/2015    
2   6,824,664   MB  ?        6/7/2015   ?         

1 个答案:

答案 0 :(得分:1)

这应该返回任意两个连续的行,其中包含空字符串和任意顺序的NULL:

qualify -- within two rows there's both
        -- an empty string
   max(Segment_Value_Cd)
   over (partition by party_id, Segment_Type_Cd
         order by Segment_Start_Dt
         rows 1 preceding) = '' 
and      -- and a NULL
   min(case when Segment_Value_Cd is null then '*' end)
   over (partition by party_id, Segment_Type_Cd
         order by Segment_Start_Dt
         rows 1 preceding) is not null