首页 > 解决方案 > 基于有效性的 SQL 分组

问题描述

我有下表,我们称之为 tbl_costcenters,其中包含以下虚拟条目:

ID PosName CostcenterCode ValidFrom ValidUntil
1  test1   111            1.1.2019  1.6.2019
2  test1   111            1.6.2019  1.9.2019
3  test1   222            1.9.2019  1.6.2020

我会得到以下结果:

PosName  ValidFrom    ValidUntil   CostcenterCode
test1    1.1.2019     1.9.2019     111
test1    1.9.2019     1.6.2020     222

这是非常简化的。真正的表包含更多的列。我需要根据 costcentercode 对它们进行分组,并获得包含我示例的前两个条目的有效性,从记录 ID 1 返回validfrom,从记录ID 2 返回validuntil。

抱歉,我真的不知道要搜索什么。我认为对于精通 SQL 的人来说,答案很容易。

答案应该适用于 SQL Server 和 Oracle。

谢谢您的帮助。

标签: sqlgrouping

解决方案


这似乎是简单的聚合:

select PosName, 
       min(ValidFrom) as ValidFrom, 
       (case when max(ValidUntil) > min(ValidFrom) then max(ValidUntil) end) as ValidUntil, 
       CostcenterCode
from tbl_costcenters t
group by PosName, CostcenterCode; 

推荐阅读