sql - 基于有效性的 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。
谢谢您的帮助。
解决方案
这似乎是简单的聚合:
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;
推荐阅读
- ios - UIPageViewController 中导航栏的更改无法正常工作
- php - Laravel 5.7 CORB 被阻止的问题
- user-interface - 如何在 Windows 的松弛应用程序中复制工作区 URL?
- php - PHP 内部操作码缓存
- sql - 如何在 PostgreSQL 中使用数组进行批量更新?
- javascript - 你能在javascript中创建一个check_box_tag吗
- css - 3个粘盒一盒,最后一个不浮出主盒
- azure - 如何使用 Istio Ingress 在 AKS 中公开服务?
- javascript - 更改滚动方向时使 div 旋转 180 度
- python - 在 python 中,是否有一个函数可以在说明时间范围的同时增加日期和时间?