首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于时间框架的行合并减少SQL Server 2012中的数据冗余

基于时间框架的行合并减少SQL Server 2012中的数据冗余
EN

Stack Overflow用户
提问于 2015-03-12 15:55:00
回答 2查看 41关注 0票数 0

我有下面的SQL问题,在这个问题中,我实际上正在寻找最有效的方法来完成这个任务。假设我有下表:

代码语言:javascript
复制
r|Company - StartPeriod - EndPeriod - NumberOfEmployees - NumberOfMachines ...
1|A - 2014-1-1 - 2014-2-5 - 30 - 1
2|A - 2014-2-6 - 2014-3-7 - 30 - 1
3|A - 2014-3-8 - 2014-4-9 - 31 - 1
4|A - 2014-4-9 - 2014-5-1 - 32 - 1
5|B - 2014-1-2 - 2014-2-1 - 20 - 2
6|B - 2014-2-2 - 2014-3-1 - 20 - 2
7|B - 2014-3-2 - 2014-4-1 - 20 - 2

注意到冗余的数据量了吗?这是因为公司不时地被取样,因此周期实际上是随机长度的。

现在的问题是,如何合并行当且仅当变量NumberOfEmployees、NumberOfMachines等是相同的,但是StartPeriod和终结期不同?当然,我想用最早的阶段取代开始阶段,用最近的阶段取代结束阶段。

R只是一个指示器,而不是数据库中的一个变量。在这种情况下,1和2将合并,但3,4将被保留,因为它有不同的值(即它有31名雇员而不是30名员工)。

在我看来,这是一个非常棘手的问题,我甚至不确定SQL是否能做到这一点。

由此产生的产出如下:

代码语言:javascript
复制
r|Company - StartPeriod - EndPeriod - NumberOfEmployees - NumberOfMachines ...
1|A - 2014-1-1 - 2014-3-7 - 30 - 1
2|A - 2014-3-8 - 2014-4-9 - 31 - 1
3|A - 2014-4-9 - 2014-5-1 - 32 - 1
4|B - 2014-1-2 - 2014-4-1 - 20 - 2

谢谢你做的一切!

EN

回答 2

Stack Overflow用户

发布于 2015-03-12 15:57:21

您可能只需使用group by

代码语言:javascript
复制
select company, min(startperiod) as startperiod, max(endperiod) as endperiod,
       numberofemployees, numberofmachines . .
from table t
group by company, numberofemployees, numberofmachines;

如果这不能解决问题,请编辑问题并提供更多关于合并行所需的附加逻辑的信息。

票数 1
EN

Stack Overflow用户

发布于 2015-03-12 16:03:35

你可以采用“孤岛与缺口”战略:

代码语言:javascript
复制
select r, company, min(startperiod), max(EndPeriod)
     , NumberOfEmployees, NumberOfMachines, ..., grp
from (
    select r, company, startperiod, EndPeriod, ...
         , row_number() over (order by r)
         - row_number() over (partition by company, 
                                           NumberOfEmployees,
                                           NumberOfMachines, ...  
                              order by r) as grp
    from T
)
group by r, company, NumberOfEmployees, NumberOfMachines, ..., grp
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29014445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档