2012-02-19 71 views
0

我有一个表,看起来像这样: Source Table合并多条记录为1

我想编写一个查询将返回此: Desired result

我试图合并基于记录在effect_date上,但前提是end_dates在effect_date和end_date范围内。

+5

effect_date值* not *如何能够在包含自身作为边界之一的范围内? – 2012-02-19 04:09:53

+0

2012年1月21日的end_date不在effect_date 1/22/2012和end_date 2/4/2012之间。 – 2012-02-19 04:33:14

回答

0

试试这个SQL查询:

select * 
from TABLE 
where end_date between effect_date and end_date 
+0

如果您会注意到,我将使用effect_date和最大end_date将前2条记录合并为1。然后我需要将最后2条记录合并到1中,保留effect_date并再次获得最大的end_date,在这种情况下它是相同的。 – 2012-02-19 04:31:10

1
select employee 
,  effect_date 
,  max(end_date) end_date 
,  max(clinical_fte) 
,  max(admin_fte) 
,  max(mgmt_fte) 
,  max(other_fte) 
from table 
group by employee 
,  effect_date 

正如克里斯农民,该结束日期必须是effect_date日期和结束日期之间的第二个要求如前所述是愚蠢的,因为它永远是正确的。 我已选择要合并的所有记录的max,因为您尚未说明要如何合并它们。随意根据您的需求进行调整;)

+0

他说合并,我会假设'sum(...)'在数字上会更合适吗? – Ben 2012-02-19 10:33:35

+0

使用max(end_date)可以解决部分问题。这将前两个记录合并在一起。我现在需要将第2条和第3条记录合并在一起。看起来我很不好地解释了这个问题。 – 2012-02-19 20:11:28