如何按 ID 分组并查找日期中的空白以确定 Alteryx 中的开始和结束日期?

Posted

技术标签:

【中文标题】如何按 ID 分组并查找日期中的空白以确定 Alteryx 中的开始和结束日期?【英文标题】:How to group by ID and find gaps in dates to determine start and end date in Alteryx? 【发布时间】:2021-10-14 18:09:20 【问题描述】:

我有一个如下所示的数据集;

ID       Date
1   2018-07-23
1   2018-07-24
1   2018-07-25
1   2018-07-26
1   2019-12-31
2   2020-01-01
2   2020-01-02
2   2020-01-03
2   2020-01-06
2   2020-01-07

我想要实现的是将此数据集转换为开始和结束日期,无论它们在日期列中是否存在任何间隙。

所以预期的输出如下所示;

ID     StartDate        EndDate
 1    23-07-2018      26-07-2018
 1    31-12-2019      31-12-2019
 2    01-01-2020      03-01-2020
 2    06-01-2020      07-01-2020

如您所见,两个 ID 都有两行,因为日期之间存在间隔。

请帮忙,谢谢。

【问题讨论】:

【参考方案1】:

对于 StartDate:使用 MultiRowFormula 工具。在其选项中,按 ID 分组,告诉它默认为最近行的值,并使用类似以下的表达式:

IIF ([Date] == DateAdd([Row-1:Date],'days',1) THEN
    [Row-1:StartDate]
ELSE
    [Date]
ENDIF

这将为您创建所有 [StartDate],但您仍然会有多行。所以,然后做一个聚合工具:按 ID 和 StartDate 分组,并将 EndDate 创建为 max([Date])。这应该为每个 StartDate 提供正确的 EndDate。

【讨论】:

以上是关于如何按 ID 分组并查找日期中的空白以确定 Alteryx 中的开始和结束日期?的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL 查找按日期分组的前 N ​​行

如何在 SQL 中按多列分组并按日期排序?

按每个 id 分组并获取第一个日期

如何按 RDD 中的选定字段数进行分组,以查找基于这些字段的重复项

查找 ID 列中的空白 + 选择上一个/下一个日期列

在 SQL 中查找按日期分组的集合中的平均最低项