SQL打折日期交叉问题

1. **数据结构:**数据为平台商品促销数据

表名:good_promotion

字段名:brand(品牌)、stt(打折开始日期)、edt(打折结束日期)。

2. 需求:

① 创建表

② 计算每个商品总的打折销售天数

*注意:其中的交叉日期。*比如vivo品牌,第一次活动时间为2021-06-05到2021-06-15,第二次活动时间为2021-06-09到2021-06-21其中9号到15号为重复天数,只统计一次,即vivo总打折天数为2021-06-05到2021-06-21共计17天。

3. 数据准备:

编辑数据文件good_promotion.txt

at@hadoop102 \~$ vim /opt/module/hive/datas/good_promotion.txt

oppo 2021-06-05 2021-06-09

oppo 2021-06-11 2021-06-21

vivo 2021-06-05 2021-06-15

vivo 2021-06-09 2021-06-21

redmi 2021-06-05 2021-06-21

redmi 2021-06-09 2021-06-15

redmi 2021-06-17 2021-06-26

huawei 2021-06-05 2021-06-26

huawei 2021-06-09 2021-06-15

huawei 2021-06-17 2021-06-21

create table good_promotion(

brand string,

stt string,

edt string

)

row format delimited

fields terminated by '\t';

sql 复制代码
select
    brand,
    sum(if(days>=0,days+1,0)) days
from (
    select
        brand,
         datediff(edt,stt) days
    from (
        select
            brand,
              if(maxEdt is null,stt,if(stt>maxEdt,stt,date_add(maxEdt,1))) stt,
              edt
        from (
            select
                   brand,
                   stt,
                   edt,
                   max(edt) over(partition by brand order by stt rows between UNBOUNDED PRECEDING and 1 PRECEDING) maxEdt
            from good_promotion
        )t1
    )t2
)t3
group by brand;
相关推荐
l1t13 小时前
DeepSeek总结的ALTER FUNCTION SET work_mem:无需全局更改即可修复 PostgreSQL 磁盘溢出
sql·缓存·postgresql
qq_4523962314 小时前
第六篇:《SQL 优化的艺术:从慢查询到毫秒级响应》
数据库·sql
JavaPub-rodert15 小时前
王仕宇分享:把 MySQL 排障做成 AI Agent,慢 SQL、锁等待、连接数和主从异常都能自动查
人工智能·sql·mysql
ClouGence15 小时前
SQL 效率天花板!开源 CloudDM,自带一站式 AI SQL 助手
数据库·sql·开源
qq_4523962316 小时前
第七篇:《事务与并发:MVCC、隔离级别与锁机制》
sql
Decay__16 小时前
附-01 · MySQL 压测与容量规划 —— sysbench 基准测试、容量评估与参数基线
运维·数据库·sql·mysql·架构
l1t16 小时前
DeepSeek总结的PostgreSQL 中的 SQL 与 PL/pgSQL:计划缓存
sql·缓存·postgresql
泡海椒1 天前
# 深度解析JQuick-SQL Join重排序与哈希连接执行机制
数据库·sql·哈希算法
hyunbar7771 天前
华为云 GaussDB(DWS) 和 PG 的谓词下推有何差异
sql