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;
相关推荐
HackTwoHub2 小时前
AI大模型网关存在SQL注入、附 POC 复现、影响版本LiteLLM 1.81.16~1.83.7(CVE-2026-42208)
数据库·人工智能·sql·网络安全·系统安全·网络攻击模型·安全架构
l1t3 小时前
DeepSeek总结的DuckLake构建基于 SQL 原生表格式的下一代数据湖仓
数据库·sql
yaodong5186 小时前
不会Python也能数据分析:Gemini 3.1 Pro解决办公问题的SQL自动生成
python·sql·数据分析
苍煜8 小时前
慢SQL优化实战教学
java·数据库·sql
雪碧聊技术12 小时前
组合查询(union)
数据库·sql
juniperhan14 小时前
Flink 系列第24篇:Flink SQL 集成维度表指南:存储选型、参数调优与实战避坑
大数据·数据仓库·sql·flink
Chengbei1114 小时前
AI大模型网关存在SQL注入、影响版本LiteLLM 1.81.16~1.83.7(CVE-2026-42208)
数据库·人工智能·sql·安全·web安全·网络安全·系统安全
冷小鱼15 小时前
从关系模型(SQL)基石到AI与信创时代的智能查询语言
数据库·sql
庞轩px15 小时前
致远互联实习复盘:一条SQL替代300次循环查询,组织架构选择器从5秒降到300毫秒
java·sql·mysql·mybatis·实习经历·n+1问题·join联表查询
编程之升级打怪16 小时前
MySQL数据库SQL语句简单用法
sql·mysql