首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL:如何将范围的分区组合成尽可能大的连续范围

MySQL:如何将范围的分区组合成尽可能大的连续范围
EN

Stack Overflow用户
提问于 2018-09-06 01:44:21
回答 1查看 119关注 0票数 0

我一直在尝试完成一个相当复杂的SQL查询(也许很简单?)压缩包含重复信息的表。我在SequelPro中使用MySQL 5.7.14。我是一个SQL新手,对joins,unions等有基本的了解。我认为这需要一个带有一些组bys的子查询,但我不知道如何做得最好。下面的表格展示了我正在尝试做的一个简单的例子:

table

对于每个col_1重复输入,当col_2和3(分别是范围的开始和结束)设置的范围重叠时,我希望压缩成一个单独的输入。对于col_4和5,应报告落在此范围内的条目中的最大值。在上面的例子中,在col_1中,a有三个重叠的范围,我想将其压缩为col_1的最小值和col_2的最大值,col_4的最大值和5。对于col_2中的'b‘,有两个不重叠的范围(31-50,12-15),因此它将按原样返回这两行。对于c,它将返回一行,范围为100-300,对于col_4和col_5,返回值分别为3和2。本示例所需的完整结果如下所示:

query output

我应该补充说,在某些地方有'null‘值,应该被视为零。有谁知道最好、最简单的方法吗?提前谢谢你!!

更新:我已经尝试使用建议的范围设置查询,但我得到一个错误。查询如下:

代码语言:javascript
运行
复制
WITH a AS (SELECT range 
  , lower(col_2) AS startdate
  , max(upper(col_3)) OVER (ORDER BY range) AS `end`
   FROM   `combine`
   )
, b AS (
   SELECT *, lag(`end`) OVER (ORDER BY range) < `start` OR NULL AS step
   FROM   a
   )
, c AS (
   SELECT *, count(step) OVER (ORDER BY range) AS grp
   FROM   b
   )
SELECT daterange(min(`start`), max(`end`)) AS range
FROM   c
GROUP  BY grp
ORDER  BY 1;

我收到的错误是:您的SQL语法中有一个错误;请查看与您的MySQL服务器版本对应的手册,以获取正确的语法,以便在第1行中使用接近'a AS (SELECT range,lower(col_2) AS startdate,max(upper(col_3)) OVE‘的语法

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52190794

复制
相关文章

相似问题

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