【发布时间】:2021-08-05 09:55:11
【问题描述】:
我来寻求帮助,我一直在尝试为记录数据集生成孤岛,但我无法做到,我尝试过使用 Lag 函数之类的东西,在每条记录上生成行,然后生成岛屿,但没有得到正确的结果。
我尝试过的解决方案参考:Show Date Range in Custom Column - Gaps and Islands
我需要生成这个数据结构:
| ChartShiftWeekdayDetailId | IslandStartsOn | IslandEndsOn | NoLinkingReason |
| 3600 | 2021-06-25 | 2021-07-01 | 'Can't be .....'|
| 3600 | 2021-07-02 | 2021-07-14 | null |
| 3600 | 2021-07-15 | 2021-07-31 | 'Can't be .....'|
| 3600 | 2021-08-01 | 2021-08-05 | null |
这是一个应该产生预期结果的记录示例。
我已经达到了这个结果
但正如您所见,这不是预期的结果。
这是我尝试过的:
SELECT *,
CONCAT(NoLinkingReason,
CAST(DATEDIFF(DAY,
LAG(DateValue, 1, CAST(ClearedData.DateValue AS datetime) - 1) OVER (PARTITION BY ChartShiftWeekdayDetailId,
NoLinkingReason
ORDER BY DateValue),
DateValue) AS varchar(10))) AS NumDays
FROM ClearedData;
非常感谢您的帮助。
【问题讨论】:
-
那么您尝试了什么,为什么没有成功?您引用了一个不同的问题,而该问题的答案似乎正是您想要的。
-
嗨@Larnu 当然,我已经尝试使用 Lag 函数作为引用的链接,但我得到的结果非常接近正确,但如果你能看到,第一行从 2021-06-10 到 2021-07-31,这是不正确的,因为中间还有另一个岛,从 2021-07-02 到 2021-07-14。
-
使用edit 功能。
-
根据问题指南,请不要发布代码、数据、错误消息等的图像 - 将文本复制或键入问题中。请保留将图像用于图表或演示渲染错误,无法通过文本准确描述的事情。
标签: sql sql-server tsql gaps-and-islands