我正在尝试选择记录,如果有重叠日期我只有1条记录。我环顾四周,发现问题很接近但无法让他们为我遇到的问题而工作。如果你能帮助我,我会非常感激。
问题是会员可以使用有效日期和结束日期进行多次访问。没有重叠时间可以注册。如果有相同生效日期的重叠时间,我将如何只有1条记录?
我尝试了最大的EndDate等..但是没有用。此外,对于具有相同TIN和日期的1个成员,我可以拥有2条以上的记录。因此需要将MIN / MAX日期作为该时间段的一个记录。 数据:
MEMBER - TIN - EffectiveDate - EndDate
12345 4567 2016-11-18 2016-11-19 --dont want this record
12345 4567 2016-11-18 2017-11-20 --good
12345 5678 2016-11-18 2016-12-30 --good, different TIN
Select t1.MEMBER, t1.TIN, t1.EFF_DT
, Case When (select t2.MEMBER = t1.MEMBER and t1.Eff_DT = t2.END_DT
THEN t2.END_DT ELSE t1.END_DT
END AS END_DT
)t2
FROM Table_A t1
WHERE t1.MEMBER = t2.MEMBER
order by t1.MEMBER
希望我能从我的尝试中获得正确的代码。
答案 0 :(得分:2)
我想这就是你想要的?
SELECT *
FROM
(
SELECT *, RN = ROW_NUMBER() OVER (PARTITION BY MEMBER, TIN, EFFECTIVE_DATE
ORDER BY END_DATE DESC)
FROM yourtable
) d
where d.RN = 1
如果没有,请告诉我们您的预期结果
答案 1 :(得分:0)
非常常见的查询挑战。看看这篇文章:
http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/
你可以尝试:
select t1.*
from (
select MEMBER, TIN, MIN(EffectiveDate) AS MinDate, MAX(EndDate) AS MaxDate
from table_name group by MEMBER, TIN
) as t1 inner join table_name as t2
on t1.MEMBER = t2.MEMBER and t1.TIN = t2.TIN;
答案 2 :(得分:0)
我想你可以使用上面的解决方案。您能提供您尝试过的查询吗?您应该能够执行以下操作:
SELECT Member, TIN, MAX(EndDate) as endDate
FROM table_name
GROUP BY Member, TIN
答案 3 :(得分:0)
试试这个。
SELECT t.member, t.tin, t.effectivedate, t.enddate
FROM TABLE_A t
GROUP BY t.tin, t.member, t.enddate
HAVING t.enddate =
(
SELECT MAX(tt.enddate)
FROM TABLE_A tt
WHERE t.member = tt.member
AND t.tin = tt.tin
)