由于空格/空格列在一列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 ?
答案 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