sql - 即使重复值不同,也将数据分组到不同的分区
问题描述
我有类似这样的数据:
Arrange Id | Begin Date | End Date | Dept Id
------------+-------------+----------+-----------
11345 01/02/2001 02/03/2003 2230
11345 02/03/2004 04/05/2005 2230
11345 04/06/2005 06/06/2006 2210
11345 05/06/2007 07/09/2008 2210
11345 08/09/2009 11/23/2010 2230
11454 04/01/2008 04/07/2008 1100
11454 04/08/2008 05/06/2009 1100
11454 05/07/2009 07/09/2010 1300
11454 08/07/2011 10/23/2012 1100
预期输出:
Arrange Id | Begin Date | End Date | Dept Id
------------+-------------+----------+-----------
11345 01/02/2001 04/05/2005 2230
11345 04/06/2005 07/09/2008 2210
11345 08/09/2009 11/23/2010 2230
11454 04/01/2008 05/06/2009 1100
11454 05/07/2009 07/09/2010 1300
11454 08/07/2011 10/23/2012 1100
我希望根据每个数据对数据进行分区Arrange Id
,我需要为每个日期Min(Begin Date)
,.. 但是是重复的,例如最初的 6620、6630、6640,然后是 6620 等。 Max(End Date)
Arrange id
Dept Id
Dept Id
我需要根据上面显示的预期输出显示值。如果我基于Arrange Id, Dept Id
group by 例如在上面的案例 11345 , 2230 dept id 我得到单个值,但我需要两个不同的值,如上图所示。
任何人都可以通过编写 SQL 查询(针对 Oracle)来帮助我解决这个问题吗?
解决方案
好的,所以你必须保持你的集合的顺序才能做你想做的事。因此,我使用行号和排名来查找您正在寻找的特定岛屿。这依赖于您的组由其他 ArrangeID 分隔的假设:
SELECT arrangeid,
MIN(begindate) AS BEGINDATE,
MAX(enddate) AS ENDDATE,
deptid
FROM
(
SELECT arrangeid,
begindate,
enddate,
deptid,
DENSE_RANK() OVER (PARTITION BY arrangeid, deptid ORDER BY rn) AS grp
FROM (
SELECT arrangeid,
begindate,
enddate,
deptid,
ROW_NUMBER() OVER ( PARTITION BY arrangeid ORDER BY begindate) -
RANK() OVER ( PARTITION BY arrangeid, deptid ORDER BY begindate) AS rn
FROM arrange
) rawdata
) ranked
GROUP BY arrangeid,
deptid,
grp
ORDER BY arrangeid,
deptid
这给出了输出:
ARRANGEID BEGINDATE ENDDATE DEPTID
11345 2005-04-06T00:00:00Z 2008-07-09T00:00:00Z 2210
11345 2009-08-09T00:00:00Z 2010-11-23T00:00:00Z 2230
11345 2001-01-02T00:00:00Z 2005-04-05T00:00:00Z 2230
11454 2008-04-01T00:00:00Z 2009-05-06T00:00:00Z 1100
11454 2009-05-07T00:00:00Z 2010-07-09T00:00:00Z 1300
11454 2011-08-07T00:00:00Z 2012-10-23T00:00:00Z 1100
你可以在这里找到小提琴:http ://sqlfiddle.com/#!4/17b162/49
推荐阅读
- facebook - PWA - 当我使用 Facebook 登录身份验证时保持登录状态
- minizinc - 最小化问题:对称性破坏
- javascript - 如何使用扩展运算符替换数组中的值
- python - 如何让python按特定顺序打印出所有字母?
- java - 不兼容的类型:RecViewFragment 无法转换为 Fragment
- react-native - 由纯 react native 和 expo 裸工作流构建的应用程序包之间的巨大大小差异
- r - R - 如何按名称从列表的子列表中选择元素
- twitter-bootstrap - 如何在 Razor 视图 MVC 中查看手风琴?
- javascript - 我有这个脚本,它在 WP 上使用。问题是图像在闪烁,我不知道如何解决这个问题。任何人都可以建议修复吗?
- node.js - 我可以在 TypeORM 中实现垂直继承映射吗?=