【发布时间】:2021-10-25 09:32:33
【问题描述】:
我正在尝试创建事件的时间线,其中一些是重复的:
源数据
| user_id | question | opinion | last_modified |
|---|---|---|---|
| 21175381 | 13 | 1 | 2019-03-11 |
| 21175381 | 13 | 1 | 2019-03-12 |
| 21175381 | 13 | 0 | 2019-03-13 |
| 21175381 | 13 | 1 | 2019-03-14 |
| 21175381 | 13 | 0 | 2019-03-16 |
| 21175381 | 13 | 0 | 2019-03-17 |
| 21175381 | 13 | 0 | 2019-03-18 |
想象在随机的时间段内被问到相同的问题 - 例如“你同意还是不同意一个陈述?”我的工作目标是描述支持的时期——在多长时间内,响应保持为 1 或 0:
目标表
| user_id | question | opinion | from | until |
|---|---|---|---|---|
| 21175381 | 13 | 1 | 2019-03-11 | 2019-03-13 |
| 21175381 | 13 | 0 | 2019-03-13 | 2019-03-14 |
| 21175381 | 13 | 1 | 2019-03-14 | 2019-03-16 |
| 21175381 | 13 | 0 | 2019-03-16 | NULL |
最后一个“直到”条目应该是一个NULL,因为这是最后一次测量,我们预计此后不会发生变化。
我尝试了一个带有行偏移的基本窗口函数,但是它没有考虑重复,只是创建了多个具有不正确的开始/截止日期的条目:
连续重复示例 - 不良行为
| user_id | question | opinion | from | until |
|---|---|---|---|---|
| 21175381 | 13 | 1 | 2019-03-11 | 2019-03-12 |
| 21175381 | 13 | 1 | 2019-03-12 | 2019-03-13 |
我在 ADF 中构建它,因此欢迎任何关于如何通过纯 SQL 或 ADF 转换使其工作的想法!非常感谢您的时间、精力和知识!
【问题讨论】:
-
这看起来不像条件聚合,更像是一个间隙和孤岛问题。
-
感谢您的评论@Larnu,不知道差距和孤岛问题 - 看起来确实如此,将研究解决方案。
-
为什么要让直到值包含下一个意见的第一个日期?
标签: sql sql-server group-by azure-data-factory window-functions