我一直在尝试完成一个相当复杂的SQL查询(也许很简单?)压缩包含重复信息的表。我在SequelPro中使用MySQL 5.7.14。我是一个SQL新手,对joins,unions等有基本的了解。我认为这需要一个带有一些组bys的子查询,但我不知道如何做得最好。下面的表格展示了我正在尝试做的一个简单的例子:
对于每个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。本示例所需的完整结果如下所示:
我应该补充说,在某些地方有'null‘值,应该被视为零。有谁知道最好、最简单的方法吗?提前谢谢你!!
更新:我已经尝试使用建议的范围设置查询,但我得到一个错误。查询如下:
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‘的语法
https://stackoverflow.com/questions/52190794
复制相似问题