如何解决SQL如何基于数据列将具有日期范围的行转换为具有日期范围的许多行
我想基于列将数据行转换为sql中的日期范围。 下面是示例数据:
FROMDATE TODATE Data
1/01/2010 31/10/2010 100
1/01/2011 31/12/2011 50
1/01/2012 31/12/2012 50
1/01/2013 31/12/2013 50
1/01/2014 31/12/2014 50
1/01/2015 12/10/2015 50
13/10/2015 31/12/2015 50
1/01/2016 21/02/2016 50
22/02/2016 31/12/2016 67
1/01/2017 2/10/2017 67
3/10/2017 31/12/2017 75
1/01/2018 31/03/2018 75
1/04/2018 30/06/2018 75
1/07/2018 31/10/2018 40
1/11/2018 31/12/2018 75
1/01/2019 31/03/2019 75
1/04/2019 31/12/2019 75
1/01/2020 1/03/2020 75
所需结果为:
FROMDATE TODATE Data
1/01/2010 31/10/2010 100
1/01/2011 21/02/2016 50
22/02/2016 2/10/2017 67
3/10/2017 30/06/2018 75
1/07/2018 31/10/2018 40
1/11/2018 1/03/2020 75
解决方法
我想感谢@Gordon Linoff,他是answer之一帮助我解决了与大家分享的空白和岛屿问题。
之所以将其发布为答案是因为标题可能会在此类问题的搜索结果中找到
我已经使用Oracle数据库完成了它,它应该与所有标准sql数据库一起使用。 dbfiddle供参考
SELECT t.key_id,MIN(fromdate),MAX(todate)
FROM (SELECT t.*,row_number() over(ORDER BY fromdate) AS startseq,row_number() over(PARTITION BY t.key_id ORDER BY fromdate) AS endseq
FROM some_table t) t
GROUP BY t.key_id,(startseq - endseq);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。