2014-11-08 99 views
-2

请求您的帮助acheiving从下文筛选值范围

日以下结果我有以下结果集

CampaignName Matchfrom MatchTo 
a    08-09-2013 07-11-2013 
a    10-09-2013 10-11-2013 
a    08-11-2013 07-01-2014 
a    09-11-2013 08-01-2014 

上述集上matchfrom日期列进行排序。第一行将被视为主人

现在查询应该过滤掉matchfrom位于主人日期范围内的行。

这个,我用一个自加入来实现。但是现在第三排完全超出了主人(第一排)的范围。这现在应该被认为是主人,它应该过滤掉第四行。

最终结果集就会像下面,标记为合格或不合格

CampaignName Matchfrom MatchTo 
a    08-09-2013 07-11-2013 PASS 
a    10-09-2013 10-11-2013 FAIL 
a    08-11-2013 07-01-2014 PASS 
a    09-11-2013 08-01-2014 FAIL 

谁能告诉我这个

+0

请通过指定改善你的问题该语言(似乎是SQL),以及在编辑器中使用__code block__按钮正确格式化结果集。 – 2014-11-08 12:32:51

回答

0

随着你的数据,你必须多做一点擦洗,但下面的代码应该让你在正确的方向。您必须小心,因为您的“主记录”中的MatchFrom和MatchTo与所有其他数据相反。

CREATE TABLE #tmpCampaign(
CampaignName varchar(1), 
Matchfrom Date, 
MatchTo Date 
) 

INSERT INTO #tmpCampaign VALUES 
('a','08-09-2013','07-11-2013'), 
('a','10-09-2013','10-11-2013'), 
('a','08-11-2015','07-01-2014'), 
('a','09-11-2013','08-01-2014') 

;WITH Campaign AS(
SELECT *, 
ROW_NUMBER() OVER (PARTITION BY campaignName ORDER BY MatchFrom) as CampRank 
FROM #tmpCampaign) 

SELECT c1.*, c2.MatchFrom as MasterFrom, c2.MatchTo as MasterTo, 
CASE WHEN c1.Matchfrom >= c2.MatchFrom AND c1.Matchfrom <= c2.MatchTo THEN 'Pass' 
ELSE 'Fail' END as PassFail 
FROM Campaign as c1 
JOIN Campaign as c2 
ON c1.CampaignName = c2.CampaignName and c2.CampRank = 1 
0

可能这是当日期重复发生的创建问题,而是你的结果集我已按照挑datekey和做分区取得成果

;With Cte as 
(select Campaignname, 
     matchfrom, 
     matchto, 
ROW_number()OVER(PARTITION BY right(matchfrom, len(matchfrom) - charindex('-', matchfrom) - 3)ORDER BY Campaignname)RN 
from #tmpCampaign) 
select Campaignname, 
     matchfrom, 
     matchto, 
     Case when RN = 1 then 'Pass' ELSE 'Fail' END 
from Cte