在雪花中按日期聚合数据组

Posted

技术标签:

【中文标题】在雪花中按日期聚合数据组【英文标题】:Aggregating on groups of data order by date in Snowflake 【发布时间】:2021-08-19 09:20:07 【问题描述】:

我的表中有以下数据:

我需要 Snowflake 中的输出如下:

基本上是按交易日期排序,并获得国家和城市的第一笔交易和最后一笔交易以及按顺序完成的交易计数。我尝试使用窗口函数,但没有得到想要的结果。如果您可以看到,棘手的部分是必须按顺序进行分组。您可以看到 TEXAS 和 CALIFORNIA 根据国家和城市的交易顺序重复。

最好是通过查询。第二好,以其他一些快速的计算方式。必须在批量数据上完成。我真的不想采用按顺序提取数据然后按顺序逐行遍历的方法,除非这是唯一的选择。也愿意就此提供建议。谢谢!

【问题讨论】:

【参考方案1】:

提示:分组依据、最小值、最大值、计数

【讨论】:

这不会为 TEXAS 和 CALIFORNIA 提供多行【参考方案2】:

我能够找到一个逻辑并且以下查询有效:

select countryid, regionid, min(requesttime), max(requesttime), count(*) from (select deviceid,countryid,regionid,cityid, requesttime,
             row_number() over (partition by countryid order by requesttime) as seqnum_1,
             row_number() over (partition by countryid, regionid order by requesttime) as seqnum_2
      from table t order by requesttime
     ) t group by countryid, regionid, (seqnum_1 - seqnum_2) order by min(requesttime);

【讨论】:

以上是关于在雪花中按日期聚合数据组的主要内容,如果未能解决你的问题,请参考以下文章

在猫鼬聚合框架中按日期排序

在 ElasticSearch 6 中按子聚合过滤、排序和分页

在 KQL 中按属性聚合数据

如何从 sql 中的 2 个表中按组聚合和计算平均值?

在 MongoDB 中按年和月聚合查询

如何在 PostgreSQL 中按时间间隔聚合行数?