没有唯一分区时的 SQL WINDOW FUNC

Posted

技术标签:

【中文标题】没有唯一分区时的 SQL WINDOW FUNC【英文标题】:SQL WINDOW FUNC when no unique partition 【发布时间】:2021-08-04 21:41:47 【问题描述】:

我有这张桌子:

Date ID Product_A_Count Product_B_Count
1 A 1 2
2 A 1 2
3 A 2 1
4 A 1 2

我想把它转换成:

Start_Date End_Date ID Product_A_Count Product_B_Count
1 2 A 1 2
3 3 A 2 1
4 4 A 1 2

有没有办法只使用 SQL 来做到这一点?我一直在尝试 row_number 和 lag 但没有一个看起来正确(因为按 ID、Product_A_Count 和 Product_B_Count 组合的分区不是唯一的)。

非常感谢所有建议!

【问题讨论】:

【参考方案1】:

这是一种孤岛问题。在这种情况下,行号的差异可能是最简单的解决方案:

select id, product_a_count, product_b_count, min(date), max(date)
from (select t.*,
             row_number() over (partition by id order by date) as seqnum,
             row_number() over (partition by id, product_a_count, product_b_count order by date) as seqnum_2
      from t
     ) t
group by id, product_a_count, product_b_count, (seqnum - seqnum_2);

例如,如果日期都是规则间隔的,则可能会有更简单的解决方案。

【讨论】:

太棒了!这解决了我的问题!我肯定会阅读更多关于这种技术的信息。非常感谢您的帮助!

以上是关于没有唯一分区时的 SQL WINDOW FUNC的主要内容,如果未能解决你的问题,请参考以下文章

SQL登陆出现错误,用SQL身份登陆没问题,用windows身份登陆就出现下面的错误。求解!!!

分区数量超过消费者时的 Apache Kafka 消息消费

sql效率优化通过索引

spark 函数

没有 orderBy 的 Spark 窗口函数

this问题 个人总结