2014-04-20 112 views
0

我如何为下面的查询编写查询。持续资格日期的SQL查询

我有一个像

id eff date term date 
C 20000101 20050228 
C 20000501 20120229 
C 20060101 20120301 

我需要检查的连续资格数据,如果连续我需要摆脱的其他记录。对于上面的例子中我需要的输出作为

id Eff date Term date 
C 20000101 20120301 

我需要删除ranges.In上面的例子中我有资格的重叠范围内的重叠。如果我有另一个输入记录(第四个)说C 20130101 20130531那么我的输出应该是两个记录。 ç20000010 20120301和C 20130101 20130531

+0

你是什么意思与“连续资格”?为什么只选择那一行?请扩大您的请求。 – ericpap

+0

我需要删除重叠的范围。在上面的例子中,我有重叠范围的资格。如果我有另一个输入记录(第四个)说C 20130101 20130531那么我的输出应该是两个记录。 C 20000010 20120301和C 20130101 20130531 – user3539875

回答

0

我不知道关于连续资格的业务规则 - 但不知道眼前这个将做到这一点:

SELECT id, min(Eff_date), max(Term_date) 
FROM my_table 
GROUP BY id 
+0

我需要删除重叠范围。在上面的示例中,我具有重叠范围的资格。如果我有另一个输入记录(第四个)说C 20130101 20130531那么我的输出应该是两个记录。 C 20000101 20120301和C 20130101 20130531 – user3539875

+0

这可以在SQL中完成,但我认为需要分析函数,例如LAG,以便我们可以访问前一行。你的DBMS是否支持分析功能?或者,我的意愿是在程序上做到这一点。您使用哪种语言或环境运行此查询? –