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;
相关推荐
scheduleTTe8 小时前
SQL增查
数据库·sql
SoFlu软件机器人18 小时前
告别手动报表开发!描述数据维度,AI 自动生成 SQL 查询 + Java 导出接口
java·数据库·sql
云边散步21 小时前
🥢 第2篇:SELECT就是点菜,FROM就是菜单 —— 写你人生第一句SQL!
sql·mysql
见未见过的风景1 天前
想删除表中重复数据,只留下一条,sql怎么写
数据库·sql
hello 早上好2 天前
MyBatis 动态 SQL、#{}与 ${}区别、与 Hibernate区别、延迟加载、优势、XML映射关系
sql·mybatis·hibernate
NullPointerExpection2 天前
LLM大语言模型不适合统计算数,可以让大模型根据数据自己建表、插入数据、编写查询sql统计
数据库·人工智能·sql·算法·llm·llama·工作流
我命由我123452 天前
Spring Boot - Spring Boot 集成 MyBatis 分页实现 手写 SQL 分页
java·spring boot·后端·sql·spring·java-ee·mybatis
切糕师学AI2 天前
SQL中对字符串字段模糊查询(LIKE)的索引命中情况
数据库·sql
茅坑的小石头2 天前
SQL,在join中,on和where的区别
sql
云边散步2 天前
🧱 第1篇:什么是SQL?数据库是啥?我能吃吗?
数据库·sql