如何在 Presto 中获取连续日期,其中一列中的开始日期和另一列中的结束日期

Posted

技术标签:

【中文标题】如何在 Presto 中获取连续日期,其中一列中的开始日期和另一列中的结束日期【英文标题】:How to get Continuous date in Presto with start date in one column and end date in another column 【发布时间】:2020-10-20 19:18:44 【问题描述】:

下面是 Presto 中 Raw 表的样子

我想创建一个新表,其中每个项目 ID 的连续日期应该有一个开始日期和结束日期,只要它在 presto 中是连续的

下面是示例表的样子

【问题讨论】:

您使用的是 Hive 还是 Presto?它们不一样。 【参考方案1】:

这是一个孤岛问题。最简单的方法是减去一个序列得到一个常数日期——然后聚合:

select id, min(datefield), max(datefield)
from (select t.*, row_number() over (partition by id order by datefield) as seqnum
      from t
     ) t
group by id, (datefield - seqnum * interval '1 day');

窗口函数因数据库而异。逻辑相同,但从datefield 中减去seqnum 天数的语法可能会有所不同。

【讨论】:

能否请您帮助我了解您为什么在 group by 中使用 (datefield - seqnum * interval '1 day') 并提供有关如何计算的示例 @rpunk21 。 . .运行代码select t.*, (datefield - seqnum * interval '1 day') from t order by id, datefield,你应该就能看到了。

以上是关于如何在 Presto 中获取连续日期,其中一列中的开始日期和另一列中的结束日期的主要内容,如果未能解决你的问题,请参考以下文章

如何在另一列中按条件分组的列中查找下一个日期?

clickhouse:如何在另一列中找到高于日期的数组中的最小日期?

SQL Select:获取列中的上一个日期

在 presto 中加入/联合以将电子邮件保留在一列中

如何将一列的列值组合到 MySQL 中的另一列中?

如何将一列中的两列合并为日期与熊猫?