sql - 如何将连续日期合并为一个日期?
问题描述
我有一个如下所示的数据:
invalid 43090 2017-08-01 2017-09-01
invalid 43090 2019-11-01 2019-12-01
invalid 43090 2019-12-01 2020-01-01
invalid 43090 2020-01-01 2020-02-01
invalid 43090 2020-02-01 2020-03-01
invalid 43090 2020-03-01 2020-04-01
invalid 43090 2020-04-01 2020-05-01
invalid 43090 2020-05-01 2020-06-01
invalid 43090 2020-06-01 2020-07-01
invalid 43090 2020-07-01 2020-08-01
我想将连续日期合并为一个日期,如下所示:
invalid 43090 1 2017-08-01 2017-09-01
invalid 43090 2 2019-11-01 2020-08-01
任何想法如何在 sql 中实现这一点。我正在使用红移。
解决方案
这是一种差距和孤岛问题。您可以使用lag()
和 累计和来识别分组。然后聚合:
select col1, col2, min(col3), max(col4)
from (select t.*,
sum(case when prev_col4 = col3 then 0 else 1 end) over
(partition by col1, col2
order by col3
rows between unbounded preceding and current row
) as grp
from (select t.*,
lag(col4) over (partition by col1, col2 order by col3) as prev_col4
from t
) t
) t
group by col1, col2, grp;
推荐阅读
- docker - 如何在 Docker 中为 WSO2 身份服务器指定 SSL 证书?
- twitter-bootstrap - 无法显示后效
- csv - Tableau 没有将我的 csv 数据源转换为表格
- excel - 宏按钮仅在第二次单击时起作用
- oauth-2.0 - Erlang 中的 Google Oauth2
- python - 如果其他矩阵的维度和内容已知,如何估计用作矩阵乘法中的乘数的矩阵的内容?
- python-3.x - 使用 Python 在非结构化文档中提取特征的方向
- codenameone - 连接 iTunes 时的 Codenameone 设置
- python - 笔记本中的自定义 wxPython 控件被绘制在笔记本选项卡上
- java - 为什么在“Exerciser”应用程序中使用正则表达式的语法在 jsonata4java 中不起作用?